系列:容器部署基础
- Docker 安装与使用教程:从零部署第一个容器服务
- Dockerfile 入门:构建自己的应用镜像
- Docker Compose 使用指南:管理多容器服务
- Docker 数据卷与备份:数据库容器怎么保护数据
- Docker 网络与端口映射:容器之间怎么通信
- Docker 日志和排障:logs、exec、inspect、stats
- 用 Docker 部署一个 Python Web 项目
- Nginx 反向代理入门:静态文件、HTTPS 和 Web 服务转发
- HTTPS 和证书部署指南:Let’s Encrypt、Cloudflare、Nginx 怎么配
- Docker 生产环境部署注意事项:镜像、日志、数据卷和健康检查
Docker 网络最容易混淆的是:容器内部端口、宿主机端口、服务名访问不是一回事。
ports
ports: - "127.0.0.1:8000:8000"左边是宿主机,右边是容器。绑定 127.0.0.1 表示只允许本机访问,通常再交给 Nginx 反代。
expose
expose: - "8000"expose 只给 Compose 内部服务看,不发布到宿主机。
服务名通信
Compose 里服务可以用服务名互相访问:
postgresql://db:5432/appredis://redis:6379/0不要在容器里写 127.0.0.1 连接另一个容器。那指的是当前容器自己。
排查
docker compose psdocker compose exec web shcurl http://db:5432端口问题也可以结合 Linux 网络排查命令:ss、curl、dig、ping、traceroute。
常见问题
服务在容器里监听 127.0.0.1,外部访问不到。容器内应用一般要监听 0.0.0.0。
总结
Docker 网络先记住三句话:容器之间用服务名,发布到宿主机用 ports,只内部暴露用 expose。理解这三点,大部分端口问题都能定位。