最近迁移某些容器到新的 Docker 网络, 但随后发现一个问题, 具有下列特征:
- 只有 IPv4 的 80 端口不通 (但是群晖自身通过 SSH + curl 可以访问), IPv6 的可以;
- 443 端口在忽略证书错误的情况下, IPv4 & IPv6 都可以访问;
- 如果该容器的 80 端口被一个 Nginx 反向代理到一个非标准端口, 则可以正常通过 Nginx 的 IP + 非标准端口访问原 80 端口的内容;
- 如果用该网络的网关地址 (192.168.3.1) 访问群晖, 则 80 端口也不通 (但使用 http://192.168.0.100:80 访问群晖则没有问题).
网络细节:
- Docker 是群晖上的;
- 该网络的网关地址为 192.168.3.1, 如果带上 5000/5001 端口则访问它相当于访问群晖;
- 该网络在路由器上添加了一个静态路由条目 (仅 IPv4), 以便位于 192.168.0.0/24 上的机器访问, 如下图所示:
- 有独立的内网 IPv4 地址: 192.168.3.0/24;
- 有独立的公网 IPv6 地址: ????:????:????:????:c0a:890b::/96 (前 64 位不便展示, 后 32 位为随机分配);
- 该网络使用如下命令创建:
docker network create \
-d macvlan \
--subnet=192.168.3.0/24 \
--gateway=192.168.3.1 \
--ip-range=192.168.3.2/24 \
--ipv6 \
--subnet=<IPv6 子网前缀> \
--gateway=<IPv6 网关, 默认为 ????:????:????:????:c0a:890b::1> \
-o parent=ovs_eth0 \
-o macvlanmode=bridge \
<网络名称>
具体的访问故障我做了一个表格.
尚未发现影响日常使用, 但还是想尝试解决.
上述可能缺少关键信息.