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

发布时间: 2026-07-26
作者: DP
浏览数: 0 次
分类: 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`)加入其中。这可以防止容器在尝试连接同网段的其他内部服务时也去走代理,从而避免不必要的网络延迟或连接失败。
关联内容
相关推荐
PHP 终极指南:如何正确处理并存储 Textarea 中的 Markdown 换行符
00:00 | 151次

在 PHP 项目中,从 textarea 获取包含 Markdown 换行符(如 `\n`)的输入时...

深入解析:向 MySQL DATETIME 字段插入 Unix 时间戳的正确姿势与陷阱
00:00 | 27次

将一个Unix时间戳(如1764975600)直接插入MySQL的DATETIME字段会成功吗?答案...

解锁 IDE 神力:PHP PHPDoc 终极指南,从入门到精通
00:00 | 117次

本文深入探讨了 PHPDoc 在现代 PHP 开发中的核心作用,特别是如何利用 `@var` 和 `...

轻松搞定MySQL外键约束错误:无法TRUNCATE表的终极解决方案
00:00 | 98次

在MySQL中执行TRUNCATE操作时,遇到“Cannot truncate a table re...