我试图在IPv6上运行一个带有多个公开端口的码头容器。我不希望容器有自己的IPv6地址。我只想让它们能够在主机的IPv6地址下(使用端口转发)联系到。
我在码头守护进程(网络/ipv6 6/)中启用了网络/ipv6 6/。
我试过了
ports:
# The HTTP port
- ":::80:80"在用于容器的docker-compose.yaml中,但这似乎完全破坏了配置:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9774a1a6322c traefik:latest "/entrypoint.sh --ap…" 1 second ago Up Less than a second 80/tcp traefik对于另一个容器(它不在我的控制之下,我似乎无法知道它是如何启动的),端口被正确转发:
a04b40299a8f 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也可以使用主机的IPv6地址(如预期的那样)访问此地址。对于第一个容器,我如何做到这一点?
发布于 2021-02-11 23:01:30
In
您必须在ipv6文件中手动选择一些支持docker-compose.yml的网络,例如:
services:
serviceName:
networks:
- traefik
networks:
traefik:
enable_ipv6: true
ipam:
config:
- subnet: "fd12:3456:789a:1::/64"请注意,一些过时的docker-compose版本不支持enable_ipv6选项。它固定在1.26.2 (不支持)和1.27.4 (确实支持)之间。
解释
启动Docker时,会自动创建默认桥网络(也称为桥),除非另有规定,新启动的容器将连接到它。src
但是当您使用时,如果您没有指定一个网络,它会为您创建一个网络。在日志中是这样的:
使用默认驱动程序创建网络"traefik_default“
而且这个默认网络还没有启用ipv6:
$ docker network inspect traefik_default | grep EnableIPv6
"EnableIPv6": false,因此,您应该定义一个启用ipv6的自定义网络。如果我没有弄错,那么子网参数是强制性的,您可以使用一些私有ipv6子网,如上面的示例所示。
请注意,在我的示例中,网络的实际名称是<projectName>_traefik。您可以使用完全用户定义的名称(本例中为traefik)创建外部网络:
docker network create --ipv6 --subnet=fd12:3456:789a:2::/64 traefikhttps://stackoverflow.com/questions/66090810
复制相似问题