在 Docker Compose 中通过环境变量为 Alpine Linux 容器配置回环接口地址,并支持 AnyIP 功能。
.
├── Dockerfile # 基于 alpine:3.19,安装 iproute2
├── entrypoint.sh # 启动时自动配置回环地址 & AnyIP 路由
├── docker-compose.yml # 示例 Compose 配置
└── README.md
# 构建并启动
docker compose up -d --build
# 查看回环地址
docker compose exec alpine-lo ip addr show lo
# 查看 AnyIP local 路由
docker compose exec alpine-lo ip route show table local dev lo
| 变量 | 说明 | 示例 |
|---|---|---|
LOOPBACK_ADDRS | 逗号分隔的回环地址(含前缀长度),逐条 ip addr add 到 lo | 127.0.0.2/8,127.0.0.3/8 |
ANYIP_ROUTES | 逗号分隔的子网,以 ip route add local 挂到 lo,整段子网均可响应 | 192.0.2.0/24,198.51.100.0/24 |
ANYIP_ROUTE_LOCALNET | true 时设置 net.ipv4.conf.all.route_localnet=1,使 127/8 可本地路由(需 SYS_ADMIN) | false |
| LOOPBACK_ADDRS | ANYIP_ROUTES | |
|---|---|---|
| 实现方式 | ip addr add <ip> dev lo | ip route add local <subnet> dev lo |
| 适用场景 | 少量已知固定 IP | 大段地址池、VIP、网络模拟 |
| 地址可见性 | ip addr show lo 可见 | 不显示为接口地址,但内核响应整段 |
| 所需权限 | NET_ADMIN | NET_ADMIN |
Linux 内核的 AnyIP 特性通过将子网加入 local 路由表实现:
ip route add local 192.0.2.0/24 dev lo
内核将该网段标记为本机地址,发往该段内任意 IP 的报文均由本机处理,
无需为每个地址单独执行 ip addr add。
| 功能 | 所需 capability |
|---|---|
| 回环地址 / AnyIP 路由 | NET_ADMIN |
route_localnet sysctl | SYS_ADMIN + compose sysctls |
route_localnet=1 会关闭内核对 127/8 报文的 martian 检查,
可能使本应只监听 localhost 的服务暴露给外部路由,仅在明确需要时开启。
# AnyIP:ping 子网内任意地址(无需预先 ip addr add)
docker compose exec alpine-lo ping -c 2 192.0.2.100
docker compose exec alpine-lo ping -c 2 192.0.2.200
# 回环地址
docker compose exec alpine-lo ping -c 2 127.0.0.2
Content type
Image
Digest
sha256:35829a778…
Size
5.2 MB
Last updated
8 months ago
docker pull haksrpd/vip