※ 記事一覧
環境
■ WSLバージョン:
■ Ubuntuバージョン:
■ Dockerバージョン:
WSL バージョン: 2.3.24.0
カーネル バージョン: 5.15.153.1-2
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.22631.4317
カーネル バージョン: 5.15.153.1-2
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.22631.4317
■ Ubuntuバージョン:
Distributor ID: Ubuntu
Description: Ubuntu 24.04.1 LTS
Release: 24.04
Codename: noble
Description: Ubuntu 24.04.1 LTS
Release: 24.04
Codename: noble
■ Dockerバージョン:
Version: 27.3.1
はじめに
過去記事「Docker:MySQLを動かす」で、コンテナ間で共有に使用するMySQLコンテナを作成した。
この際、カスタムネットワーク"docker_nw"も作成した。
今回、WSL+Ubuntu上のコンテナで、カスタムネットワークを使わずに MySQLコンテナとphpMyAdminコンテナでの通信を試みたが、やはりエラーで連携できなかった。
(例) phpMyAdminでログインした後にエラーとなる
コンテナ間通信を行うには、カスタムネットワークを作成した方が良いらしい。
ChatGPTの回答:
ちなみに --linkオプションは非推薦、とのこと。
この際、カスタムネットワーク"docker_nw"も作成した。
今回、WSL+Ubuntu上のコンテナで、カスタムネットワークを使わずに MySQLコンテナとphpMyAdminコンテナでの通信を試みたが、やはりエラーで連携できなかった。
(例) phpMyAdminでログインした後にエラーとなる
コンテナ間通信を行うには、カスタムネットワークを作成した方が良いらしい。
ChatGPTの回答:
(Q) docker run コマンドで --network を指定しないと、"bridge"ネットワークにつながり、コンテナ間で通信できるかと思ったのですが、カスタムネットワークを作成しないとダメなんですか?
(A) おっしゃる通り、Dockerのデフォルトのネットワークモードである "bridge" ネットワークでも、コンテナ間で通信は可能です。ただし、"bridge" ネットワークではコンテナ同士がデフォルトで名前解決されないことがあります。つまり、コンテナ名(例えば mysqldb)でアクセスする場合、うまく名前解決が行われないことがあるため、カスタムネットワークを作成してコンテナを同じネットワークに配置する方法がよく推奨されます。
"bridge" ネットワークでも通信できる条件:
(A) おっしゃる通り、Dockerのデフォルトのネットワークモードである "bridge" ネットワークでも、コンテナ間で通信は可能です。ただし、"bridge" ネットワークではコンテナ同士がデフォルトで名前解決されないことがあります。つまり、コンテナ名(例えば mysqldb)でアクセスする場合、うまく名前解決が行われないことがあるため、カスタムネットワークを作成してコンテナを同じネットワークに配置する方法がよく推奨されます。
"bridge" ネットワークでも通信できる条件:
1. コンテナ名で通信するには、--link オプションを使用するか、カスタムネットワークを使う必要があります。デフォルトの"bridge" ネットワークだと、コンテナ名での名前解決が保証されません。
2. IPアドレスで通信することもできますが、コンテナのIPアドレスは動的に割り当てられるため、毎回接続するのが現実的でない場合があります。
2. IPアドレスで通信することもできますが、コンテナのIPアドレスは動的に割り当てられるため、毎回接続するのが現実的でない場合があります。
ちなみに --linkオプションは非推薦、とのこと。
WSL+Ubuntu+Dockerkカスタムネットワークを作成する
■ カスタムネットワーク作成
■ ネットワーク一覧確認
(実行例)
"docker_nw" という名前の(名前は任意)の brigdeネットワーク を作成する。
(実行例)
sudo docker network create --driver bridge docker_nw
(実行例)
user@win11a:~$ sudo docker network create --driver bridge docker_nw [sudo] password for user: ba494f3673897a516b09b48f172ca597bca7223a182fe5ae4daff081a9a4e8b2
■ ネットワーク一覧確認
"docker network ls" コマンドで確認する。
sudo docker network ls
(実行例)
user@win11a:~$ sudo docker network ls NETWORK ID NAME DRIVER SCOPE 9020b014d279 bridge bridge local ba494f367389 docker_nw bridge local 7dd7365970e6 host host local e5871c3f0c37 none null local
WSL, WSL2, Windows Subsystem for Linux, Docker, Container
0 件のコメント:
コメントを投稿