WSL #37:Dockerカスタムネットワークを作成する


環境

■ WSLバージョン:
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

■ Ubuntuバージョン:
Distributor ID: Ubuntu
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の回答:
(Q) docker run コマンドで --network を指定しないと、"bridge"ネットワークにつながり、コンテナ間で通信できるかと思ったのですが、カスタムネットワークを作成しないとダメなんですか?

(A) おっしゃる通り、Dockerのデフォルトのネットワークモードである "bridge" ネットワークでも、コンテナ間で通信は可能です。ただし、"bridge" ネットワークではコンテナ同士がデフォルトで名前解決されないことがあります。つまり、コンテナ名(例えば mysqldb)でアクセスする場合、うまく名前解決が行われないことがあるため、カスタムネットワークを作成してコンテナを同じネットワークに配置する方法がよく推奨されます。

"bridge" ネットワークでも通信できる条件:
1. コンテナ名で通信するには、--link オプションを使用するか、カスタムネットワークを使う必要があります。デフォルトの"bridge" ネットワークだと、コンテナ名での名前解決が保証されません。

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 件のコメント:

その他の記事