Pet*_*sen 5 ipv6 docker docker-compose
我在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
Run Code Online (Sandbox Code Playgroud)
现在,跑步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
Run Code Online (Sandbox Code Playgroud)
未分配IPv6地址.
我已经尝试过:
--ipv6--ipv6 --fixed-cidr-v6="2001:3984:3989::/64"
docker run -it busybox ifconfig实际上给了我一个IPv6地址(来自--fixed-cidr分配给默认bridge网络的子网)没有成功.有任何想法吗?
事实证明这确实是一个将在1.9.0中修复的docker-compose 错误.
同时,通过使用以下docker network命令创建自定义网络,有一种解决方法:
docker network create --subnet=172.16.2.0/24 --gateway=172.16.2.1 --ipv6 --subnet=<myV6Network/subnet> dockerbridge
Run Code Online (Sandbox Code Playgroud)
...然后可以docker-composed.yml通过写作在内部提供
networks:
dockerbridge:
external:
name: dockerbridge
Run Code Online (Sandbox Code Playgroud)
是的。Docker compose支持IPv6协议,并在docker引擎1.5版本开始引入。最新的撰写文件格式 3.3仍然存在问题,因此您可以使用 2.1 格式。docker swarm 仍然不够成熟,没有先进的网络配置,并且不支持 IPv6,因此它不包含在 3.3 fil 格式中。\n这是文件的示例,
\n\ndocker-compose.yml
\n\nversion: \xe2\x80\x982.1\xe2\x80\x99\nservices:\n app:\n image: busybox\n command: ping www.google.com\n networks:\n app_net:\n ipv6_address: 2001:3200:3200::20\nnetworks:\n app_net:\n enable_ipv6: true\n driver: bridge\n ipam:\n driver: default\n config:\n - subnet: 2001:3200:3200::/64\n gateway: 2001:3200:3200::1\nRun Code Online (Sandbox Code Playgroud)\n\n此 docker compose 文件将在子网 2001:3200:3200::/64 下基于 IPv6 网络创建一个名为testping_app_net的新网络,并且容器应自动分配 IPv6 地址。
\n\n让我们使用 docker-compose up 启动服务并查看服务是否通过 IPv6 协议进行通信:
\n\ndocker-compose up -d\nRun Code Online (Sandbox Code Playgroud)\n\n您可以使用以下命令验证每个容器的 IPv6 地址:
\n\ndocker exec -it 905 ip addr\nRun Code Online (Sandbox Code Playgroud)\n\n您将看到一个新容器获得 IPv6 地址 \xe2\x80\x93 2001:3200:3200::20,因此它们能够相互通信。
\n\n注意:如果要在主机上启用 IPv6(默认情况下使用 IPv4 地址),您需要将这两行添加到/etc/docker目录下的daemon.json中:
\n\n{\n "ipv6": true,\n "fixed-cidr-v6": "2001:db8:1::/64"\n}\nRun Code Online (Sandbox Code Playgroud)\n\n并通过命令重新启动 docker 守护进程:
\n\n$ sudo systemctl restart docker\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
8720 次 |
| 最近记录: |