为什么docker-compose运行nginx需要 "deamon off"

docer-compose.yml

# nginx
nginx_test:
  container_name: "nginx_test"
  image: "nginx"
  tty: true
  # command: nginx
  command: nginx -g "daemon off;"

如果按照注释的地方配置,容器会一直是exited状态。

docker-compose 日志:

nginx_test exited with code 1

补充说明:
1 下载的官方镜像。
2 用docker inspect命令可以看到,默认的命令就是command: nginx -g "daemon off;",因此可以不填写 command配置。
但是我的问题是,为什么一定要加上daemon off, nginx 容器才能正常运行?

阅读 5.9k
2 个回答

你下载的是否是官方镜像?
如果是官方镜像,不需要使用command,容器启动成功既nginx启动成功。

docker 容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的依据,如果docker 容器pid挂了,那么docker容器便会直接退出

docker run的时候把command最为容器内部命令,如果你使用nginx,那么nginx程序将后台运行,这个时候nginx并不是pid为1的程序,而是执行的bash,这个bash执行了nginx指令后就挂了,所以容器也就退出了,和你这个一样的道理,pm2 start 过后,bash 的pid为1,那么此时bash执行完以后会退出,所以容器也就退出了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题