Dockerのhostネットワークについてまとめたメモ

Pocket

Dockerのhostネットワークについて調べたメモです。

hostネットワーク

hostネットワークは文字通りホストとネットワークを共有します。
そのためネットワークインターフェースもホストのeth0を使用します(ホストのネットワークインターフェースがeth0の場合)。

hostネットワークの特徴は以下のとおりです。

  • hostネットワークは1つしか存在できない
  • hostネットワークはDockerインストール時に作成されるのでユーザーは作成できない。
  • ユーザーがhostネットワークを作成しようとするとエラーが発生する
$ sudo docker network create -d host sample
Error response from daemon: only one instance of "host" network is allowed

hostネットワークを指定して起動

$ sudo docker run -d --name httpd --net host httpd:latest

hostネットワークはホストのネットワークを共有するのでifconfigもホストと同じです。
ネットワークインターフェースもホストのeth0を使用します。

$ sudo docker exec -it httpd /bin/bash
root@ip-10-3-0-183:/usr/local/apache2# apt install net-tools // ifconfigインストール
....
root@ip-10-3-0-183:/usr/local/apache2# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:37ff:fe8d:b952  prefixlen 64  scopeid 0x20<link>
        ether 02:42:37:8d:b9:52  txqueuelen 0  (Ethernet)
        RX packets 1392  bytes 85837 (85.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 2875  bytes 13382135 (13.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 9001
        inet 10.3.0.183  netmask 255.255.255.0  broadcast 10.3.0.255
        inet6 fe80::4b5:10ff:fe1f:21cd  prefixlen 64  scopeid 0x20<link>
        ether 06:b5:10:1f:21:cd  txqueuelen 1000  (Ethernet)
        RX packets 87575  bytes 94433872 (94.4 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 105846  bytes 24945855 (24.9 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 574  bytes 61238 (61.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 574  bytes 61238 (61.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ブラウザでアクセスするとeth0に通信が発生していることが確認できます(docker0には発生しない)。

$ sudo tcpdump -tnl -i eth0 tcp  port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

IP 203.0.113.150.51221 > 10.3.0.183.80: Flags [S], seq 251437622, win 65535, options [mss 1394,nop,wscale 6,nop,nop,TS val 1967450493 ecr 0,sackOK,eol], length 0
IP 10.3.0.183.80 > 203.0.113.150.51221: Flags [S.], seq 3651188619, ack 251437623, win 62643, options [mss 8961,sackOK,TS val 14863613 ecr 1967450493,nop,wscale 6], length 0
IP 203.0.113.150.51222 > 10.3.0.183.80: Flags [.], ack 1, win 2051, options [nop,nop,TS val 1589689261 ecr 14863612], length 0

docker0には通信は発生していません。

sudo tcpdump -tnl -i docker0 tcp port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on docker0, link-type EN10MB (Ethernet), capture size 262144 bytes

// ブラウザでアクセスしても通信は発生しない

コメント

No comments yet.

コメントの投稿

改行と段落タグは自動で挿入されます。
メールアドレスは表示されません。