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

Docker容器ls中PORTS列80/tcp含义及映射问题排查

问题解答

1. 80/tcp的含义

80/tcp是容器内部Nginx服务默认监听的端口状态,未映射到宿主机,仅表示容器内的Nginx进程在监听80端口。这是因为你使用的官方Nginx基础镜像(如nginx:latest)的Dockerfile中自带了EXPOSE 80指令,用来声明容器默认使用的端口——即使你的docker-compose.yml里没显式配置80端口,这个端口信息也会出现在docker container ls的PORTS列中。

2. 映射40000:40000无法访问的原因

容器内的Nginx默认仅监听80端口,你配置的40000:40000是把宿主机40000端口映射到容器的40000端口,但容器里没有任何服务在这个端口运行,自然无法访问。而映射80:80时,宿主机80端口的请求会转发到容器内Nginx正在监听的80端口,因此能正常访问。

3. 解决方法

方法一:直接修改端口映射(最简单)

无需改动Nginx配置,直接将宿主机40000端口映射到容器内的80端口,修改docker-compose.yml中Nginx服务的ports字段:

services:
  # 你的Nginx服务名称
  nginx:
    # 其他配置保持不变
    ports:
      - "40000:80"  # 宿主机40000 → 容器80

重启容器后,访问http://<宿主机IP>:40000即可正常打开应用。

方法二:修改Nginx监听端口(需自定义配置)

如果一定要让Nginx在容器内监听40000端口,步骤如下:

  1. 新建自定义Nginx配置文件(比如nginx.conf),将监听端口改为40000:
server {
    listen 40000;
    root /usr/share/nginx/html;  # React构建文件的挂载路径
    index index.html index.htm;

    location / {
        try_files $uri $uri/ /index.html;  # 单页应用路由 fallback
    }
}
  1. 修改docker-compose.yml,挂载自定义配置到容器的Nginx配置目录,并映射40000端口:
services:
  nginx:
    image: nginx:alpine
    volumes:
      - ./build:/usr/share/nginx/html  # 挂载React构建产物
      - ./nginx.conf:/etc/nginx/conf.d/default.conf  # 挂载自定义配置
    ports:
      - "40000:40000"
  1. 重启容器,访问http://<宿主机IP>:40000即可正常访问。

额外说明

如果不想在docker container ls中看到80/tcp的信息,可以在docker-compose.yml的Nginx服务中添加expose: [],用来覆盖基础镜像的EXPOSE 80声明,但这只是隐藏端口元数据,不影响实际运行,一般没必要特意修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:00:17