Dockerコンテナのネットワーク設定
カテゴリ:コンテナ仮想化
この記事ではDockerのネットワーク設定について解説いたします。
Note以降は CentOS 8 + Docker 19.03.12 環境での手順となります。
Dockerコンテナの作成時はデフォルト(ネットワークを指定しない場合)ではコンテナにホストと別ネットワークのIPアドレスを割り当てます。 ホストと同じIPアドレスを使用したり、ループバックアドレスのみを有効にする場合はオプションでネットワーク名を指定する必要があります。Dockerコンテナで指定可能なネットワークの確認
まず、Dockerコンテナで指定できるネットワーク名を docker network ls コマンドで確認します。
例)
# docker network ls NETWORK ID NAME DRIVER SCOPE a78ed51400c8 br0 bridge local a7b5078fdefd bridge bridge local 655c6de238a1 host host local 1932ce4fd492 none null local
bridge | ホストと別のネットワークのIPアドレスを割り振る |
---|---|
host | ホストと同じIPアドレスを共有 |
none | ループバックインターフェースのみを使用 |
参考bridgeは、ホストとコンテナ間での仮想ネットワークインターフェースvethを使用した通信を行います。ホストの仮想ブリッジdocker0がゲートウェイとなり、コンテナにIPアドレス(初期設定:172.17.0.0/16)を割り振ります。
# ifconfig ... docker0: flags=4099mtu 1500 inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255 inet6 fe80::42:9eff:fe20:71b4 prefixlen 64 scopeid 0x20 ether 02:42:9e:20:71:b4 txqueuelen 0 (Ethernet) RX packets 13 bytes 1444 (1.4 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 50 bytes 6096 (5.9 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Dockerコンテナを起動すると、ホスト側に仮想ネットワークインターフェースvethが作成されることが確認できます。
# ifconfig ... veth27e8b50: flags=4163mtu 1500 inet6 fe80::20bb:22ff:fe80:c9a6 prefixlen 64 scopeid 0x20 ether 22:bb:22:80:c9:a6 txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 17 bytes 2236 (2.1 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Dockerコンテナにネットワークを指定
使用するネットワークは、Dockerコンテナの作成時に --network オプションで指定します。
例)
docker run -it --name httpd1 --network host httpd
参考bridge、host、noneのいずれかを指定します。--network オプションを指定しない場合は、bridgeとなります。
DockerコンテナのIPアドレスを確認
bridgeを指定したコンテナのIPアドレスを確認する場合は docker inspect コマンドに続けて対象のコンテナIDまたは名前を指定します。
docker inspect コンテナID|名前
例)
ゲートウェイ 172.17.0.1 から、IPアドレス 172.17.0.3 が割り振られていることが確認できますね。
docker inspect httpd1 ... "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "a7b5078fdefd33867d73fefb259022ccf77bc702452b135bc72010f2960c2136", "EndpointID": "07394a8eaf83d8814d38bf5df77d7d7b2336f6755855a8eb7d274bc265ccedab", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:03", "DriverOpts": null } } ...
ネットワークモードごとのコンテナの状態
最後に、参考のために各ネットワークモードごとのコンテナ側のネットワークインターフェースの状態を載せておきます。
host
ホスト側と同じになります。
# ip addr ... 2: ens33:mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:85:1a:59 brd ff:ff:ff:ff:ff:ff inet 192.168.11.38/24 brd 192.168.11.255 scope global dynamic noprefixroute ens33 valid_lft 172613sec preferred_lft 172613sec inet6 2408:210:c5c4:7e00:8b8b:2b8:b119:98c8/64 scope global dynamic noprefixroute valid_lft 2591816sec preferred_lft 604616sec inet6 fe80::6b78:60ac:456e:f86e/64 scope link noprefixroute valid_lft forever preferred_lft forever ...
bridge
ホストとは別ネットワーク(172.17.0.0/16)のIPアドレスが割り振られます。
# ip addr 1: lo:mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 7: eth0@if8: mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever
none
ループバックインターフェースのみとなります。
# ip addr 1: lo:mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever
公開日時:2020年08月25日 19:06:40
最終更新日時:2022年03月13日 08:32:26