映像使用docker run-dit正确运行,但使用docker stack deploy-c退出
我最近一直在向docker移植一个web服务。正如标题中提到的,我遇到了一个奇怪的场景,当我使用docker run-dit运行它时,服务在后台运行,但当我使用docker-compose.yml时,服务退出 更清楚地说,我在Dockerfile中有一个入口点:映像使用docker run-dit正确运行,但使用docker stack deploy-c退出,docker,docker-compose,docker-swarm,Docker,Docker Compose,Docker Swarm,我最近一直在向docker移植一个web服务。正如标题中提到的,我遇到了一个奇怪的场景,当我使用docker run-dit运行它时,服务在后台运行,但当我使用docker-compose.yml时,服务退出 更清楚地说,我在Dockerfile中有一个入口点: ENTRYPOINT ["/data/start-service.sh"] 这是start-service.sh的代码: #!/bin/bash /usr/local/bin/uwsgi --emperor=/data/vassals
ENTRYPOINT ["/data/start-service.sh"]
这是start-service.sh的代码:
#!/bin/bash
/usr/local/bin/uwsgi --emperor=/data/vassals/ --daemonize=/var/log/uwsgi/emperor.log
/etc/init.d/nginx start
exec "$@";
正如您所看到的,我只是在这个shell脚本中启动uwsgi和nginx。最后一行exec只是让脚本接受一个参数并保持它运行。然后,我使用以下命令运行此命令:
docker run -dit -p 8080:8080 --name=web_server webserver /bin/bash
如前所述,服务运行正常,我可以访问Web服务
现在,我尝试使用docker-compose.yml部署该服务,但该服务一直在退出/关闭。我试图检索日志,但没有成功。从docker ps-a中我所能看到的是,它运行了一秒钟或2秒或3秒,然后退出
这是我的docker-compose.yml:
version: "3"
services:
web_server:
image: webserver
entrypoint:
- /data/start-service.sh
- /bin/bash
ports:
- "8089:8080"
deploy:
resources:
limits:
cpus: "0.1"
memory: 2048M
restart_policy:
condition: on-failure
networks:
- webnet
networks:
- webnet
yml文件中的entrypoint条目只是为了确保start-service.sh脚本将以/bin/bash作为参数运行,以保持服务运行。但是,服务再次关闭。bash将在没有正确tty的情况下退出。由于您通过exec执行bash,因此它将变为PID 1。每当PID 1退出时,容器停止
要防止出现这种情况,请将tty:true添加到compose文件中的服务描述中。这与使用docker run命令使用-t基本相同。可以提供这些命令的日志吗?docker service ls docker service logs@yamenk-感谢您的回复。我已经做了那些命令,但没有得到任何结果;既不在stdin/terminal中,也不在当前工作目录中的文件中