Docker Compose 进阶:如何配置固定 IP 与跨容器 SOCKS5 代理

发布时间: 2026-07-26
作者: DP
浏览数: 104 次
分类: Docker
内容
在复杂的 Docker 容器编排中,我们经常需要为特定服务指定固定的 IP 地址,或者让一个容器通过同网段内的另一个容器进行代理访问。本文(首发于 wiki.lib00.com)将结合实际案例,由 DP@lib00 为您讲解如何在 `docker-compose.yml` 中实现这两个高级网络配置。 ## 1. 为 Docker 容器配置固定 IP 要在 Docker Compose 中配置静态 IP,必须完成两步操作:在顶级 `networks` 节点定义网络及子网,并在 `services` 节点中引用该网络并指定 IP。 **关键配置说明:** * **IPAM 配置**:必须指定 `subnet`(子网范围),否则 Docker 无法分配你指定的静态 IP。 * **服务级网络**:使用 `ipv4_address` 强制分配 IP。 --- ## 2. 配置跨容器 SOCKS5 代理(含 DNS 解析) 如果需要让当前容器使用同网段下另一个容器(例如 IP 为 `172.18.0.61`,端口为 `1080`)的 SOCKS5 代理,最标准的方法是通过环境变量进行配置。 为了实现类似 `curl --socks5-hostname` 的效果(即**域名解析 DNS 也通过代理服务器执行**),必须使用 `socks5h://` 协议头。这对于访问特定网络环境至关重要。 --- ## 3. 完整配置示例 结合上述两点,以下是完整的 `docker-compose.yml` 配置示例。我们将网络命名为 `lib00_lan` 以作区分: ```yaml name: app-gateway services: app: image: ghcr.io/ibuhub/aistudio-to-api:v1.2.3 container_name: DP_aistudio_api ports: - 57860:7860 restart: unless-stopped environment: TZ: Asia/Shanghai # --- 代理设置 (专为 wiki.lib00.com 环境配置) --- # 使用 socks5h 表示代理服务器同时处理 DNS 解析 ALL_PROXY: socks5h://172.18.0.61:1080 HTTP_PROXY: socks5h://172.18.0.61:1080 HTTPS_PROXY: socks5h://172.18.0.61:1080 # 设置不走代理的地址,防止内部网络通信失败 NO_PROXY: localhost,127.0.0.1,172.18.0.0/16 # 将服务连接到定义的网络并指定静态 IP networks: lib00_lan: ipv4_address: 172.18.0.4 # 定义自定义网络 networks: lib00_lan: driver: bridge ipam: config: - subnet: 172.18.0.0/16 # 确保子网覆盖了 172.18.0.4 ``` ### 补充建议 在配置 `NO_PROXY` 时,务必将本地回环地址(`localhost`, `127.0.0.1`)以及当前所在的子网网段(如 `172.18.0.0/16`)加入其中。这可以防止容器在尝试连接同网段的其他内部服务时也去走代理,从而避免不必要的网络延迟或连接失败。
关联内容
相关推荐
MySQL 时间戳陷阱:为什么你的 TIMESTAMP 字段会自动更新?
00:00 | 125次

发现你的 MySQL 5.7 `TIMESTAMP` 字段在每次更新时都会自动变为当前时间吗?这并非...

从幽灵冲突到 Docker 权限:深入调试 Claude AI 助手的 Git Hook 无限循环问题
00:00 | 179次

本文记录了一次完整的技术问题排查过程。一个用于 Claude Code AI 编码助手的 Git 自...

Shell 妙用:如何将多个命令的输出优雅地写入同一个日志文件?
00:00 | 160次

在 Shell 脚本或日常系统管理中,我们经常需要执行一系列命令,并将它们的所有输出(包括标准输出和...

深度解析 AI IDE 任务提交流程:从日志看大模型底层工作原理
00:00 | 39次

本文通过分析一段典型的 AI IDE(如 Google Cloud Code)对话任务提交日志,深入...