Docker-compose跳过CMD命令登录到一个服务



我正在尝试启动服务"windsribe vpn"然后登录。我的docker文件能够运行启动命令etc/init.d/windscribe-cli start来启动服务,但它跳过命令windscribe login

当我运行sudo docker-compose up时输出是:

Starting windscribe ... OK

表示它已经启动了,但是没有显示任何错误。

不显示任何其他输出,但应该显示

Windscribe Username: example-username
Windscribe Password: example-password

输出到login

我正在使用线路CMD bash -c "/etc/init.d/windscribe-cli start && windscribe login"和我甚至尝试运行其他行,如:

CMD bash -c "/etc/init.d/windscribe-cli start && python3 myscript.py"用于启动服务和运行python脚本,但由于某些原因,它从不显示登录输出

这是我的DockerFile

FROM ubuntu:latest
RUN apt-get update
#install windscribe
RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-key FDC247B7
RUN echo 'deb https://repo.windscribe.com/ubuntu bionic main' | tee /etc/apt/sources.list.d/windscribe-repo.list
RUN apt-get -y update
RUN apt-get install -y windscribe-cli 
ENV HOME /home/host
COPY ["./"]
CMD bash -c "/etc/init.d/windscribe-cli start && windscribe login"

这是我的docker-compose.yml

version: "3"
services:
app:
image: my-app:latest
deploy:
replicas: 1
update_config:
parallelism: 1
delay: 5s
restart_policy:
condition: on-failure
build: .
environment:
- DISPLAY=${DISPLAY}
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix
networks:
- scrapping
tty: true

networks:
scrapping:
ipam:
driver: default
config:
- subnet: 192.168.150.0/24

编辑在这里我添加了命令windscribe status的输出,cmd行看起来像这样CMD bash -c "/etc/init.d/windscribe-cli start && windscribe status && windscribe login"

,输出为:

Starting windscribe ... OK
windscribe -- pid: 19, status: running, uptime: 0m, %cpu: 0.0, %mem: 
0.2

由于&&短路,如果/etc/init.d/windscribe-cli start故障,windscribe login将永远不会运行。

/etc/init.d/windscribe-cli start不能工作,因为在Ubuntu docker镜像中没有init系统。

在最佳实践中,你将永远不会发现Docker镜像中有init系统。

你可以看一下windscribe文档,弄清楚如何手动运行它。这是你想在Docker镜像中使用的过程。

windscribe login可能是一个交互式命令,但是您没有使用交互式设置运行容器。这可能会导致交互式命令的各种奇怪行为,并且可能是您所看到的原因。

根据这个答案:交互式shell使用Docker撰写

尝试添加交互式设置,看看是否能解决问题:

stdin_open: true # docker run -i

或者完整的:

version: "3"
services:
app:
image: my-app:latest
deploy:
replicas: 1
update_config:
parallelism: 1
delay: 5s
restart_policy:
condition: on-failure
build: .
environment:
- DISPLAY=${DISPLAY}
volumes:
- /tmp/.X11-unix:/tmp/.X11-unix
networks:
- scrapping
stdin_open: true # docker run -i
tty: true

相关内容

最新更新