可以在Docker容器中手动启动Nginx,但不能通过CMD自动启动

时间:2018-11-16 14:50:42

标签: docker nginx openshift

我正在Nginx部署在Docker容器中(在OpenShift上)。如果我在Dockerfile中使用ENTRYPOINT ["sleep", "infinity"],然后在容器内发出nginx -g "daemon off;",则Nginx将按预期在容器内启动。但是,如果我在Dockerfile中使用ENTRYPOINT ["nginx", "-g", "daemon off;"],则容器在启动时会产生以下错误消息:

  

nginx:[emerg] bind()到0.0.0.0:8000失败(98:地址已经在   使用)

这种差异的原因可能是什么?

2 个答案:

答案 0 :(得分:0)

您应该使用CMD ["nginx", "-g", "daemon off;"]并将ENTRYPOINT保留为默认值。

答案 1 :(得分:-1)

我现在找到了解决方法。当nginx如下时,可以从ENTRYPOINT ["/usr/local/bin/start.sh"]间接启动start.sh

#!/bin/bash
nginx
sleep infinity

奇怪的是,在nginx中对start.sh的调用仍然会产生相同的错误消息,但是由于sleep infinity后跟着ENTRYPOINT脚本,现在可以成功了。仅当我根本不调用nginx时,错误消息才会消失,但是Nginx也不运行。确实很奇怪。

顺便说一句,我使用的是nginx的Debian版本,并在user的{​​{1}}中调整了/etc/nginx/nginx.conf指令,以及一些目录权限以满足OpenShift的要求(容器映像不是以Dockerfile的身份运行,而是以随机uid的身份运行。)

更新 root cause原来是一个错误,原因是同一容器实例在容器内运行两次。这(当然,事后看来)导致同一服务器在同一节点上启动两次,并因此导致有关“第二”容器中绑定的错误消息。到目前为止,我一直只观察到“第二个”容器,因此遇到了错误。解决此问题后,root现在也可以正常工作。