Dockerを使用している場面で、サービス間(コンテナ間)の通信が正しく行われているか確認する方法にはいくつかの手法があります。
※各手法異なりますが実際は順々確認することが多いかも知れません。
1.コンテナ状態確認
コンテナが正しく動作しているか確認。
(1)docker-compose ps
対象コンテナ作成ymlファイル存在フォルダで実行可能。
※対象コンテナ作成時のdocker-compose.yml存在場所でしか実行できない。
∴他ymlで作成したコンテナは表示対象外
※以下(上記コマンドで表示対象外のコンテナ)
①∴別のdocker-compose.yml
で起動しているもの
②∴手動で起動したか独立して起動しているもの
(docker run 実行や、Docker Desktop GUIから起動したもの)
(2)docker ps
こちらはシステム全体で動作中の全コンテナを一覧表示。
2.コンテナ間の通信確認
片方のコンテナに入り、もう一方のコンテナと通信可能か確認。
(1)ping確認
※以下は、Anacondaコンテナ中のconda仮想環境のBashシェルプロンプトに入り、そこからMySQLのコンテナにping実行時の例:
(2)MySQLクライアントツールを用いて接続確認
※以下は上記conda仮想環境に入り、mysql-clientをインストール後に接続確認した際の例:
① (今回は)default-mysql-clientをインストールしています。
apt-get update
apt-get install default-mysql-client
② MySQLに接続
mysql -h mysql-container -u root -p
3.Dockerネットワーク設定確認
docker-compose.ymlにより作成起動されたコンテナは所属NWを設定内容で確認出来ます。
また、そうでない場合(docker run 起動、Docker Desktop GUI起動、等)でも、DockerNWコマンドにより確認(必要であれば(所属NWの)変更等も)できます。
(1)docker-compose.yml内容による確認
version: '3' services: django-app: ... networks: - mynetwork mysql-container: ... networks: - mynetwork networks: mynetwork: driver: bridge
(2)Dockerネットワークコマンドによる確認
※ここでは2つのコンテナが元々別々のNWに所属していた場合を想定し、共通のNWを作成し、その共通NWに、2つのコンテナを所属させる、という手順です。
① 稼働しているネットワークを確認
docker network ls
↑ 現在2つのコンテナは別々のNWに所属しています。
② 共通ネットワーク作成
・docker network create <共通ネットワーク名>
実例:
docker network create shared-network
※この実行結果は、docker network ls で確認できます。
③ (上記①で作成した)共通ネットワークに2つのコンテナを参加させる
・docker network connect <共通ネットワーク名> <参加させたいコンテナ名>
実例:
docker network connect shared-network ana-container
docker network connect shared-network mysql-container
※この実行結果は、
・docker network inspect <共通ネットワーク名>
で確認できます。
↑ 共通NW(shared-network)に、2つのコンテナ(mysql-container、ana-countainer)が参加していることが確認できました。
※上記は、共通ネットワークの位置からの確認ですが、参加しているコンテナ側からの確認も、以下のコマンドで個別に出来ます。
・docker inspect <各参加しているコンテナ名>
実例:
docker inspect ana-countainer
4.DjangoからDB接続
Djangoのコンテナ内でDjangoのシェルを起動し、データベースに繋がるか試してみます。
(1)接続確認
上記で、エラー出力は無いので、正常に接続できていることになります。
(2)データ取得
以下は、データ取得の実例になります。