こんにちはフロントエンドエンジニアのまさにょんです!
今回は、Dockerコンテナの中でping通信をする方法・コンテナ同士の通信をTestする方法について解説します。
目次
Dockerコンテナの中でping通信をする方法・コンテナ同士の通信をTestする方法
Docker Container 同士の通信ができるか確認するために、pingコマンドを使いたかったのですが、
bash: ping: command not found
が発生して、pingが実行できなかったので、その対応のLogになります。
Dockerコンテナの中に入って、bashを実行する
docker container exec
コマンドを使用することで、実行中のDocker Container内でコマンドを実行することができます。
次のコマンドで、flask_api
という名前のContainerを指定して、bash Shell を起動しています。
ここは、コンテナ名 or コンテナIDを指定します。
docker container exec -it flask_api /bin/bash
Linux OSのディストリビューション・バージョンを確認する
無事にbashとの対話モードになったら、cat /etc/os-release
コマンドを利用してOSのバージョンを表示します。
Debian GNU/Linux 10 (buster) だということがわかりました。
root@1353d6af732b:/usr/src/app# cat /etc/os-release
## [ 出力結果 ] ##
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
pingコマンドをinstallする
Debianでは、デフォルトのパッケージ管理システムはapt-get
なので、まず次のコマンドでUpdateします。
apt-get update
続いて、ping
コマンドをinstallします。
apt-get install inetutils-ping
これで、ping
コマンドは使えるようになりました。
試しに、Googleにping
を投げてみます。
ping google.com -c 3
## [ 実行結果 ] ##
PING google.com (172.217.31.174): 56 data bytes
64 bytes from 172.217.31.174: icmp_seq=0 ttl=36 time=62.023 ms
64 bytes from 172.217.31.174: icmp_seq=1 ttl=36 time=52.203 ms
64 bytes from 172.217.31.174: icmp_seq=2 ttl=36 time=54.178 ms
--- google.com ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max/stddev = 52.203/56.135/62.023/4.241 ms
通信確認をしたいDocker Networkの状況・IPを確認する
それでは、本題のコンテナ同士の通信をTestする方法に入っていきます。
まずは、ネットワーク一覧の確認からします。
いくつかある中から、確認したいNetworkを確認しておきます。
docker network ls
## [ 出力結果 ] ##
NETWORK ID NAME DRIVER SCOPE
6905ce02f3e1 bridge bridge local
7d0ac1503226 docker-practice-network bridge local
7d2a0edfd235 flask-api_default bridge local
a99e9af11f39 host host local
026def818f56 insta_word_cloud_app_default bridge local
83e651bc9f6c insta_word_cloud_app_network bridge local
今回、Docker Container 同士の通信をTestしたいNetworkはinsta_word_cloud_app_network
になります。
docker network inspect
コマンドで、Docker Networkの状況を確認します。
ちなみに、inspectは検査するという意味の英単語です。
docker network inspect insta_word_cloud_app_network
## [ 出力結果 ] ##
[
{
"Name": "insta_word_cloud_app_network",
"Id": "83e651bc9f6cdcbc7e0158dea081f62fd6fe95c07f6d051dd3860b41df3004fc",
"Created": "2023-05-07T09:53:08.519710555Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.31.0.0/16",
"Gateway": "172.31.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"1353d6af732b88cb510c515ed8b9ed2f1eabbe494730ba1ee5fb7b255acdfce8": {
"Name": "flask_api",
"EndpointID": "417d0a98e24eb0d8888b2f050429519bf2b6514bab134637d2268badb3d59218",
"MacAddress": "02:42:ac:1f:00:02",
"IPv4Address": "172.31.0.2/16",
"IPv6Address": ""
},
"18e6b6ddbd91813f524fc48506b7c32cd0482c4488970042f999ec246f9e70b0": {
"Name": "insta_word_cloud_app-frontend-1",
"EndpointID": "5dabe23ec71c126ac244f30ee994fa33796c64d0793b2103d4bbe066c0c95f0a",
"MacAddress": "02:42:ac:1f:00:03",
"IPv4Address": "172.31.0.3/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
同じDocker Network内に、2つのContainerがあることがわかりました。
今回はflask_api
からinsta_word_cloud_app-frontend-1
に対してping
で通信Testを実施したいので、
次のようなコマンドを実行しました。
root@1353d6af732b:/usr/src/app# ping 172.31.0.3 -c 5
## [ 出力結果 ] ##
PING 172.31.0.3 (172.31.0.3): 56 data bytes
64 bytes from 172.31.0.3: icmp_seq=0 ttl=64 time=1.242 ms
64 bytes from 172.31.0.3: icmp_seq=1 ttl=64 time=0.360 ms
64 bytes from 172.31.0.3: icmp_seq=2 ttl=64 time=0.482 ms
64 bytes from 172.31.0.3: icmp_seq=3 ttl=64 time=0.344 ms
64 bytes from 172.31.0.3: icmp_seq=4 ttl=64 time=0.356 ms
--- 172.31.0.3 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.344/0.557/1.242/0.346 ms