图像使用docker run -dit正常运行,但是使用docker stack deploy -c退出
我最近已经把一个web服务移植到docker上了。 正如在标题中提到的,我遇到了一个奇怪的场景,当我使用docker run -dit运行它时,服务在后台运行,但是当我使用docker-compose.yml时,服务退出。
为了更清楚,我在我的Dockerfile中有这个入口点:
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来部署这个服务,但服务一直在退出/closures。 我试图检索日志,但我没有成功。 所有我可以从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文件中的入口点条目只是为了确保start-service.sh脚本将以/ bin / bash作为参数运行,以保持服务正常运行。 但是,服务又一次closures了。
bash
会在没有适当的tty的情况下退出。 由于您通过exec
执行bash
,所以变成PID 1.每当PID 1退出容器就停止。
为了防止在撰写文件中添加tty: true
到服务的描述。 这和docker run
命令中的-t
是基本相同的。
- 在使用Docker创build的nginx服务器中禁用CSS和Javascriptcaching
- Docker受信任的registry – 无法满足可用的容器插槽
- 如何公开在一个docker容器内运行的绑定到localhost的服务
- Docker容器中的Hadoop HDFS
- 如何自定义更新泊坞窗图像
- 在Docker中运行的GUI应用程序的X11转发
- JMeter不能将数据发送到Docker环境中的influxdb
- 在Linux上,Docker可以在没有虚拟机的情况下隔离应用程序。 在Linux上或虚拟机上的Docker中,应用程序运行速度会更快吗?
- 如何在一个特定的节点上创build一个docker服务,但是也将其扩展到群中的其他节点?