我正在尝试启动服务"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