You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从局域网访问Ubuntu服务器上的Nginx Docker容器?

问题分析与解决方案

核心问题

你遇到的局域网设备无法访问Docker化Nginx、容器内Nginx端口占用报错,根源在于Nginx监听配置错误和重复启动Nginx进程。


1. 修复Nginx监听配置

你的nginx.conf中server块的监听规则存在问题:

server {
    listen 192.168.178.2:80;  # 错误:绑定宿主机IP,容器内无法识别该地址
    listen 80 ssl;
    ssl_certificate /etc/nginx/cert.pem;
    ssl_certificate_key /etc/nginx/key.pem;
}

容器拥有独立网络栈,192.168.178.2是宿主机IP,容器内Nginx无法绑定该地址,导致仅宿主机本地能通过端口映射访问,局域网设备请求被拒绝。

修改为让Nginx监听容器内所有IP的对应端口,同时拆分HTTP与HTTPS配置避免冲突:

server {
    listen 0.0.0.0:80;  # 监听容器内所有IP的80端口,对应宿主机8001的HTTP访问
    server_name _;

    location / {
        root /usr/share/nginx/html;
        index index.html;
    }
}

# 单独配置HTTPS监听(需同步更新docker-compose端口映射)
server {
    listen 0.0.0.0:443 ssl;
    server_name _;

    ssl_certificate /etc/nginx/cert.pem;
    ssl_certificate_key /etc/nginx/key.pem;

    location / {
        root /usr/share/nginx/html;
        index index.html;
    }
}

同步更新docker-compose.yaml,添加HTTPS端口映射(若需启用HTTPS):

version: "3"

services:
    client:
        image: nginx
        ports:
            - 8001:80       # HTTP端口映射
            - 8443:443      # HTTPS端口映射(新增)
        volumes:
            - ./nginx:/etc/nginx:rw
            - ./nginx/html:/usr/share/nginx/html:rw  # 确保网页目录正确挂载

2. 解决端口占用错误

执行docker exec nginx-client-1 nginx时出现端口占用,是因为容器启动后已运行Nginx主进程,重复执行nginx命令会再次尝试绑定80端口引发冲突。

正确的配置重载命令:

docker exec nginx-client-1 nginx -s reload

若需重启容器,直接执行:

docker-compose restart client

3. 验证配置正确性

  1. 重启容器后,在局域网设备上访问:http://192.168.178.2:8001 或 https://192.168.178.2:8443
  2. 检查容器内Nginx监听状态:
docker exec nginx-client-1 netstat -tulpn | grep nginx

正常输出应显示Nginx监听0.0.0.0:80和0.0.0.0:443:

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1/nginx: master pro
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1/nginx: master pro

额外检查点

  • 确认宿主机防火墙规则(即使已关闭ufw,也可再次验证):
ufw allow 8001/tcp
ufw allow 8443/tcp
  • 检查宿主机端口是否被其他进程占用:
sudo lsof -i :8001

若输出仅包含docker-proxy进程,说明端口映射正常。

内容的提问来源于stack exchange,提问作者quolalula

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 11:59:54