我在Ubuntu 16.04上使用docker 1.12.1,在docker-compose 1.8.1上使用docker 1.12.1。我想从https://docs.docker.com/compose/compose-file/#ipv4-address-ipv6-address获取Compose文件来运行。作为参考,我使用以下内容创建了docker-compose.yml
:
version: '2'
services:
app:
image: busybox
command: ifconfig
networks:
app_net:
ipv4_address: 172.16.238.10
ipv6_address: 2001:3984:3989::10
networks:
app_net:
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "true"
ipam:
driver: default
config:
- subnet: 172.16.238.0/24
gateway: 172.16.238.1
- subnet: 2001:3984:3989::/64
gateway: 2001:3984:3989::1
现在,正在运行docker-compose up
生成
Creating network "tmp_app_net" with driver "bridge"
Creating tmp_app_1
Attaching to tmp_app_1
app_1 | eth0 Link encap:Ethernet HWaddr 02:42:AC:10:EE:0A
app_1 | inet addr:172.16.238.10 Bcast:0.0.0.0 Mask:255.255.255.0
app_1 | inet6 addr: fe80::42:acff:fe10:ee0a/64 Scope:Link
app_1 | UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
app_1 | RX packets:4 errors:0 dropped:0 overruns:0 frame:0
app_1 | TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
app_1 | collisions:0 txqueuelen:0
app_1 | RX bytes:520 (520.0 B) TX bytes:90 (90.0 B)
app_1 |
app_1 | lo Link encap:Local Loopback
app_1 | inet addr:127.0.0.1 Mask:255.0.0.0
app_1 | inet6 addr: ::1/128 Scope:Host
app_1 | UP LOOPBACK RUNNING MTU:65536 Metric:1
app_1 | RX packets:0 errors:0 dropped:0 overruns:0 frame:0
app_1 | TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
app_1 | collisions:0 txqueuelen:1
app_1 | RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
app_1 |
tmp_app_1 exited with code 0
未分配IPv6地址。
我已经尝试过:
--ipv6
--ipv6 --fixed-cidr-v6="2001:3984:3989::/64"
启动docker守护程序
docker run -it busybox ifconfig
实际上在这里给我一个IPv6地址(来自--fixed-cidr
子网,分配给默认的bridge
网络)没有成功。有什么想法吗?
答案 0 :(得分:6)
事实证明这确实是一个将在1.9.0中修复的docker-compose UnsupportedOperationException。
同时,通过使用docker network
命令创建自定义网络有一种解决方法:
docker network create --subnet=172.16.2.0/24 --gateway=172.16.2.1 --ipv6 --subnet=<myV6Network/subnet> dockerbridge
...然后可以通过编写
在docker-composed.yml
内部使用
networks:
dockerbridge:
external:
name: dockerbridge
答案 1 :(得分:-1)
是。 Docker compose支持IPv6协议,并且它被引入docker engine 1.5以后。还有issue with latest compose file format 3.3 所以你可以使用2.1格式。仍然没有成熟的docker swarm具有先进的网络配置,并且它不支持IPv6,因此它不包含在3.3 fil格式中。 以下是File的示例示例
<强>搬运工-compose.yml 强>
version: ‘2.1’
services:
app:
image: busybox
command: ping www.google.com
networks:
app_net:
ipv6_address: 2001:3200:3200::20
networks:
app_net:
enable_ipv6: true
driver: bridge
ipam:
driver: default
config:
- subnet: 2001:3200:3200::/64
gateway: 2001:3200:3200::1
此docker compose文件将根据子网2001:3200:3200 :: / 64下的IPv6网络创建一个名为 testping_app_net 的新网络,容器应自动分配IPv6地址。
让我们使用docker-compose来启动服务,看看服务是否通过IPv6协议进行通信:
docker-compose up -d
您可以使用
验证每个容器的IPv6地址docker exec -it 905 ip addr
您将看到新容器获取IPv6地址 - 2001:3200:3200 :: 20,因此它们可以相互通信。
注意:如果要在主机上启用IPv6,默认情况下使用IPv4地址,则需要将这两行添加到 daemon.json 下> / etc / docker 目录:
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}
并通过命令重新启动docker守护程序:
$ sudo systemctl restart docker