nginx 容器以交互模式启动并指定启动命令时无法工作的问题
2020-04-26 本文已影响0人
MrDcheng
新建 nginx 容器时使用 -it 参数以交互模式启动,并指定执行命令为 /bin/bash,容器新建成功但浏览器连接 80 端口无响应。新建命令如下:
docker run --name nginxtest \
-itd \
--restart=always \
--mount type=bind,src=/usr/src/nginx.conf,dst=/etc/nginx/nginx.conf \
--mount type=bind,src=/usr/src/conf.d,dst=/etc/nginx/conf.d \
--mount type=bind,src=/usr/src/log,dst=/var/log \
-p 80:80 \
nginx:stable \
/bin/bash
查看容器状态:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2acea2197fc3 16af99d71a72 "/bin/bash" 7 minutes ago Up 7 minutes 0.0.0.0:80->80/tcp nginxtest
根本原因是,如果不使用默认启动命令,容器内部没有启动 nginx。进入容器,查看相关进程,没有发现 nginx 进程:
root@df2ea7658f01:/# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
注:可能需要安装 netstat 命令,执行 apt-get update && apt-get install net-tools
即可
解决方案1
新建命令改为如下形式,使用默认的启动命令 nginx -g 'daemon off;'
docker run --name nginxtest \
-d \
--restart=always \
--mount type=bind,src=/usr/src/nginx.conf,dst=/etc/nginx/nginx.conf \
--mount type=bind,src=/usr/src/conf.d,dst=/etc/nginx/conf.d \
--mount type=bind,src=/usr/src/log,dst=/var/log \
-p 80:80 \
nginx:stable
此时访问 80 端口可进入欢迎页。容器状态:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9bbbda715013 16af99d71a72 "nginx -g 'daemon of…" 46 seconds ago Up 45 seconds 0.0.0.0:80->80/tcp nginxtest
解决方案2
手动开启 nginx。进入容器,执行 /etc/init.d/nginx
root@df2ea7658f01:/# /etc/init.d/nginx
root@df2ea7658f01:/# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 290/nginx: master p
此时再访问 80 端口即可进入欢迎页。