美文网首页
nginx 容器以交互模式启动并指定启动命令时无法工作的问题

nginx 容器以交互模式启动并指定启动命令时无法工作的问题

作者: MrDcheng | 来源:发表于2020-04-26 09:05 被阅读0次

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

    相关文章

      网友评论

          本文标题:nginx 容器以交互模式启动并指定启动命令时无法工作的问题

          本文链接:https://www.haomeiwen.com/subject/dlorwhtx.html