2016-09-22 4 views
2

私はUbuntu 16.04でdocker 1.12.1を使用し、1.8.1をdocker-composeしています。私はhttps://docs.docker.com/compose/compose-file/#ipv4-address-ipv6-addressからComposeファイルを実行しようとしています。参考のために、私は次の内容のdocker-compose.ymlを作成:docker-composeでIPv6アドレスを割り当てる方法

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実行すると、IPv6アドレスが割り当てられていない

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 

生成します。

私はすでに試した:

  1. docker run -it busybox ifconfigが実際に私にここに(これ--fixed-cidrサブネットからIPv6アドレスを与えること--ipv6 --fixed-cidr-v6="2001:3984:3989::/64"
    • 注意とドッキングウィンドウのデーモンを起動する--ipv6
    • でドッカデーモンを起動しますデフォルトのbridgeネットワークに割り当てられます)
  2. コード例のものではなく実際のIPv6サブネットを使用し、このサブネットで2を繰り返す。

いいえ正常に終了しません。何か案は?

答えて

4

これは確かに1.9.0で修正される予定のドッカー製作bugです。

docker network create --subnet=172.16.2.0/24 --gateway=172.16.2.1 --ipv6 --subnet=<myV6Network/subnet> dockerbridge 

... [はい

networks: 
    dockerbridge: 
    external: 
     name: dockerbridge 
1

を書き込むことによってdocker-composed.ymlの内側に利用できるようにすることができる。

一方、docker networkコマンドを使用して、カスタムネットワークを作成することで回避策があります。 Docker composeはIPv6プロトコルをサポートし、ドッカーエンジン1.5以降に導入されました。まだissue with latest compose file format 3.3 がありますので、2.1形式を使用できます。 Still Docker Swarmは、高度なネットワーキング構成では十分に成熟しておらず、IPv6をサポートしていないため、3.3 filフォーマットには含まれていません。 3200: ここでは、このドッキングウィンドウのコンファイルが新しいネットワークがサブネット2001の下でIPv6ネットワークに基づいてtestping_app_netと呼ばれるが作成されます

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 

ドッキングウィンドウ-compose.yml、ファイルのサンプル例です。 3200 ::/64とコンテナは自動的にIPv6アドレスを取得する必要があります。

私たちは、ドッキングウィンドウ・作曲アップとサービスは、IPv6プロトコルを介して通信する場合参照使用してサービスを起動してみましょう:

docker-compose up -d 

を、あなたが使用して、各コンテナのIPv6アドレスを確認することができ、

docker exec -it 905 ip addr 

新しいコンテナがIPv6アドレス - 2001:3200:3200 :: 20を取得し、互いに通信できることがわかります。

注:あなたは、デフォルトではIPv4を使用するホスト・マシン上でIPv6を有効にしたい場合は、

daemon.json下の/ etc /ドッキングウィンドウディレクトリにこれらの2行を追加する必要があります対処
{ 
    "ipv6": true, 
    "fixed-cidr-v6": "2001:db8:1::/64" 
} 

とコマンドによるドッキングウィンドウデーモンを再起動し、

$sudo systemctl restart docker 
関連する問題