问题
I am using docker 1.12.1 on Ubuntu 16.04, and docker-compose 1.8.1. I am trying to get the Compose file from https://docs.docker.com/compose/compose-file/#ipv4-address-ipv6-address to run. For reference, I created docker-compose.yml
with the following content:
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
Now, running docker-compose up
produces
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
The IPv6 address is not assigned.
I already tried:
- Starting the docker daemon with
--ipv6
- Starting the docker daemon with
--ipv6 --fixed-cidr-v6="2001:3984:3989::/64"
- Note that
docker run -it busybox ifconfig
actually gives me an IPv6 address here (from the--fixed-cidr
subnet which is assigned to the defaultbridge
network)
- Note that
- Using my actual IPv6 subnet instead of the one from the code example, and repeating 2. with this subnet
No success. Any ideas?
回答1:
It turns out this is indeed a docker-compose bug that is going to be fixed in 1.9.0.
Meanwhile, there is a workaround by creating a custom network with the docker network
command:
docker network create --subnet=172.16.2.0/24 --gateway=172.16.2.1 --ipv6 --subnet=<myV6Network/subnet> dockerbridge
... which can then be made available inside docker-composed.yml
by writing
networks:
dockerbridge:
external:
name: dockerbridge
回答2:
Yes. Docker compose supports IPv6 protocol and it was introduced into docker engine 1.5 onward. There is still issue with latest compose file format 3.3 so you could use the 2.1 format. Still docker swarm is not mature enough with advance networking configuration and it doesn't support IPv6, hence it is not included under 3.3 fil format. Here is sample example of File,
docker-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
This docker compose file will create a new network called testping_app_net based on IPv6 network under the subnet 2001:3200:3200::/64 and container should get IPv6 address automatically assigned.
Let us bring up services using docker-compose up and see if the services communicates over IPv6 protocol:
docker-compose up -d
and you could verify the IPv6 address for each container using,
docker exec -it 905 ip addr
You will see that a new container gets IPv6 address – 2001:3200:3200::20 and hence they are able to communicate with each other.
Note : If you want to enable IPv6 on host machine, which by default uses IPv4 address you need to add these two line into the daemon.json under /etc/docker directory:
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}
and restart the docker daemon by command:
$ sudo systemctl restart docker
来源:https://stackoverflow.com/questions/39649458/how-to-assign-ipv6-address-with-docker-compose