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

Nginx Docker Compose容器为何始终存在80/tcp端口?如何移除?

问题解决指南

一、移除docker ps中显示的80/tcp端口条目

官方Nginx镜像的Dockerfile默认包含EXPOSE 80声明,这是镜像的元数据,会让docker ps显示该端口条目,即使容器实际未监听80端口。要彻底移除这个显示,需自定义镜像:

  1. 创建本地Dockerfile
    在项目目录下新建Dockerfile:
FROM nginx:latest
# 删除镜像默认的Nginx配置文件(避免和挂载的配置冲突)
RUN rm /etc/nginx/conf.d/default.conf
# 不添加EXPOSE声明,镜像将不再携带80端口的元数据
  1. 修改docker-compose.yml
    替换镜像来源为本地构建:
version: "3.8"
services:
    ng_proxy: 
        build: .  # 指向Dockerfile所在目录
        restart: always
        volumes:
            - ~/ngx/public:/var/www/html
            - ~/ngx/conf.d:/etc/nginx/conf.d
        ports:
          - 8100:100
  1. 重新构建并启动容器
docker-compose up -d --build

二、解决502 Bad Gateway错误

该错误与主机80端口占用无关,排查方向如下:

  1. 检查静态文件是否存在
    确保主机~/ngx/public目录下有配置的索引文件(如index.html),可创建测试文件验证:
echo "<h1>Test Page</h1>" > ~/ngx/public/index.html
  1. 修正目录权限
    官方Nginx镜像使用nginx用户(UID 101)运行,需保证容器能读取挂载目录的文件:
chmod -R 755 ~/ngx/public
chown -R 101:101 ~/ngx/public
  1. 验证Nginx配置有效性
    进入容器检查配置是否合法:
docker exec -it ngx_web-ng_proxy-1 nginx -t

若有错误,根据提示修改default.conf(比如确认listen 100、root /var/www/html等配置项)。

  1. 确认容器内端口监听状态
    验证Nginx是否仅监听100端口:
docker exec -it ngx_web-ng_proxy-1 ss -tulpn | grep nginx

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 18:08:10