映像使用docker run-dit正确运行,但使用docker stack deploy-c退出

映像使用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

我最近一直在向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/ --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中,也不在当前工作目录中的文件中