容器端口是否能被外部访问,取决于多层配置:应用监听地址、Docker 端口发布、宿主机防火墙以及云网络策略。
客户端 → 云防火墙/安全组 → 宿主机端口 → Docker 转发 → 容器端口EXPOSE 3000 只是镜像文档,不会建立转发。真正发布端口的是:
docker run -p 127.0.0.1:3000:3000 example/api:1.0绑定 127.0.0.1 时,只有宿主机本地可访问,适合由同机反向代理转发。写成 3000:3000 通常会监听所有宿主机接口,是否公网可达还取决于防火墙和网络入口。
最小暴露原则
- 数据库和缓存只加入内部 Docker 网络,不发布宿主机端口;
- Web 服务优先只暴露给反向代理;
- 管理端口限制来源地址;
- 同时检查 IPv4 与 IPv6 监听情况;
- 不把“主机防火墙已拒绝”当作唯一安全边界。
Docker 会管理主机上的网络转发规则,不同防火墙后端和 Docker 版本的行为可能不同。生产环境应实际检查监听端口和规则,而不是只阅读 Compose 文件。