How to assign IPv6 address with docker-compose

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

  • What solutions exist for lightweight version control of an entire system image?
  • Visual Studio Docker Tools how to force a container rebuild from scratch
  • Best way to manage docker containers with supervisord
  • Can't launch selenium tests inside container, WebDriverException:Chrome failed to start: exited abnormally
  • How do I connect my iPhone to my local docker container if they're both on the same network?
  • Problems getting docker containers to see (ping) each other by name
  • 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:

    1. Starting the docker daemon with --ipv6
    2. 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 default bridge network)
    3. Using my actual IPv6 subnet instead of the one from the code example, and repeating 2. with this subnet

    No success. Any ideas?

  • Shutting down MySQL 4 correctly in Docker Container
  • View files in docker container
  • Exposing dynamically opened ports inside docker container
  • Changing Docker IP to 10.10.x.x
  • ASP.NET on Docker Not Serving Web App to Browser
  • I got an error when I try to delete an image in docker
  • One Solution collect form web for “How to assign IPv6 address with docker-compose”

    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
    
    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.