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 端口即可进入欢迎页。

上一篇下一篇

猜你喜欢

热点阅读