Dockerコンテナの中でping通信をする方法・コンテナ同士の通信をTestする方法

Docker_ping

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、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

Dockerの学習・参考書

参考・引用

  1. docker コンテナ内でpingを実行する

最近の投稿