Mat*_*fel 4 port ipv6 docker docker-compose
我正在尝试在 IPv6 上运行一个带有多个公开端口的 docker 容器。我不希望容器拥有自己的 IPv6 地址。我想要的只是让它们可以在主机的 IPv6 地址下访问(使用端口转发)。
\n我在 docker 守护进程中启用了 IPv6 ( http://docs.docker.oeynet.com/engine/userguide/networking/default_network/ipv6/ )。
\n我试过
\nports:\n # The HTTP port\n - ":::80:80"\nRun Code Online (Sandbox Code Playgroud)\n在容器的 docker-compose.yaml 中,但这似乎完全搞乱了配置:
\nCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES\n9774a1a6322c traefik:latest "/entrypoint.sh --ap\xe2\x80\xa6" 1 second ago Up Less than a second 80/tcp traefik\nRun Code Online (Sandbox Code Playgroud)\n使用另一个容器(不在我的控制之下,我似乎无法找出它是如何启动的),端口被正确转发:
\na04b40299a8f portainer/portainer-ce "/portainer" 7 days ago Up 3 minutes 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp portainer\nRun Code Online (Sandbox Code Playgroud)\n也可以使用主机的 IPv6 地址访问此容器(如预期)。\n如何为第一个容器实现此目的?
\n小智 6
此处快速添加:IPv6 语法使用括号[::]
ports:
# The HTTP port
- "[::]:80:80"
Run Code Online (Sandbox Code Playgroud)
简而言之
您必须在docker-compose.yml文件中手动选择一些支持 ipv6 的网络,例如:
services:
serviceName:
networks:
- traefik
networks:
traefik:
enable_ipv6: true
ipam:
config:
- subnet: "fd12:3456:789a:1::/64"
Run Code Online (Sandbox Code Playgroud)
请注意,某些过时的docker-compose版本不支持enable_ipv6该选项。它固定在1.26.2(不支持)和1.27.4(支持)之间。
解释
当启动 Docker 时,会自动创建一个默认的桥接网络(也称为网桥),除非另有说明,新启动的容器都会连接到该网络。源代码
但是,当您使用 docker-compose 时,如果您没有指定网络,它会为您创建一个网络。日志中看起来像这样:
使用默认驱动程序创建网络“traefik_default”
并且此默认网络尚未启用 ipv6:
$ docker network inspect traefik_default | grep EnableIPv6
"EnableIPv6": false,
Run Code Online (Sandbox Code Playgroud)
因此,您应该定义一个启用了 ipv6 的自定义网络。如果我没有记错的话,子网参数是强制性的,您可以使用一些私有 ipv6子网,如上面的示例所示。
请注意,我的示例中网络的实际名称是<projectName>_traefik。您可以使用完全用户定义的名称来创建外部网络(traefik在本例中):
docker network create --ipv6 --subnet=fd12:3456:789a:2::/64 traefik
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12994 次 |
| 最近记录: |