如何在 Docker Compose 版本 >= 3 中启用 IPv6?

7
我需要为我的docker容器启用IPv4 / IPv6双栈支持。我的docker组合文件版本为3。默认情况下,IPv4已启用,但如何为我的docker容器/网络启用IPv6呢?
我已经尝试通过更新daemon.json来更新docker守护程序,并且我知道更新被识别了,因为如果文件中存在错误,则Docker将无法启动。我在更改后重新启动了Docker(而不仅仅是我的容器),但我的容器仍然没有IPv6地址。
我发现,在版本3或更高版本的docker组合文件中,“enable_ipv6:true”无效,我不想降级文件版本。
我的更新后的daemon.json:
{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:1::/64"
}

当我修改了daemon.json文件后,使用docker inspect {id}查看容器时,会看到以下内容:

"NetworkSettings": {
            "Bridge": "",
            "SandboxID": "df737362d15722fc1b0501ac256ba371417fe513dede807f2a17bd0524630a31",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {
                "9000/tcp": null
            },
            "SandboxKey": "/var/run/docker/netns/df737362d157",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "",
            "Gateway": "",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "",
            "IPPrefixLen": 0,
            "IPv6Gateway": "",
            "MacAddress": "",
            "Networks": {
                "healixportal_default": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": [
                        "php-fpm",
                        "9b8a7aee156b"
                    ],
                    "NetworkID": "5523ae0a4a936b47f212f0e301b64cbbad1f279a33107ed1f624e28d2df96c66",
                    "EndpointID": "880e13b64bec3fc84ae5a0abb5054bda66d5f439da6853f3538eb33be14b256b",
                    "Gateway": "172.18.0.1",
                    "IPAddress": "172.18.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:12:00:02",
                    "DriverOpts": null
                }
            }
        }

所以我的容器仍然没有分配IPv6地址...

1个回答

3
根据compose仓库的这个问题,目前还不支持IPv6,但有一个解决方法可能适合您:

您必须注释掉enable_ipv6: true,并将所有其他参数保留为文档所述。 运行以下命令:

$ sudo docker-compose build

然后执行:

$ docker network create --driver bridge --ipv6 --subnet fd15:555::/64 --subnet 172.16.238.0/24 containerName-dockerfile_app_net --attachable

$ sudo docker-compose up -d


containerName-dockerfile_app_net 是什么?需要更改吗? - Mehdi Haghgoo
1
据我理解,您应该将“containerName”替换为您容器的名称,保留“-dockerfile_app_net”部分。这只是网络名称。 - char
但是这种方式只能针对特定的容器工作。我希望在docker-compose.yml中定义IPv6网络,以便为所有我的服务提供IPv6支持。 - Mehdi Haghgoo
你尝试过我提出的问题的最后一个建议吗? - char
1
不,我只是放弃了Docker网络,我可能会部署裸机。 - Mehdi Haghgoo
或者放弃使用docker-compose,尝试使用Kubernetes。 - char

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接