このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Docker超入門:Dockerコンテナのネットワークを理解する②(Docker Composeでのネットワーク構築とコンテナ間通信)

🧩 Dockerコンテナのネットワークを理解する②(Docker Composeでのネットワーク構築とコンテナ間通信)
Docker Composeを使うと、複数のコンテナを一気に構築して動かすことができ、とっても便利です。
特に、コンテナ間通信(Webアプリとデータベースなど)をスムーズに行うためのネットワーク構築は、Composeの強みの一つです。
ここでは、Composeが作るネットワークの仕組みや、コンテナ間通信の流れを、わかりやすく丁寧に解説します!
🌐 Docker Composeで作られる専用ネットワーク
Docker Composeを使うと、デフォルトで専用のネットワークが自動的に作られます。
このネットワーク内では、サービス名を使ってコンテナ同士が簡単に通信できます。
つまり、IPアドレスを気にしなくても「名前解決」ができるようになっているんです。
| 項目 | 説明 |
|---|---|
| ネットワークの種類 | Docker Composeが自動生成(例:プロジェクト名+_default) |
| 通信方法 | 同じネットワークに属するコンテナ同士がDNS名で通信可能 |
| 例 | wordpress コンテナ → wpdb コンテナにアクセス (WORDPRESS_DB_HOST: wpdb) |
💡 ポイント
以前は「link」オプションでコンテナを繋ぐこともできましたが、今は非推奨です。
現在は、Composeのnetworksセクションを使って明示的にネットワークを定義する方法が主流です。
🚪 外部からコンテナへ通信する:ポートフォワーディング
コンテナ内のアプリ(例:WordPress)に外部(ブラウザなど)からアクセスするには、ポートフォワーディングが必要です。
ホストのポートとコンテナのポートを紐づけることで、通信を橋渡しします。
実行例
docker run -p 8080:80 image_name| 項目 | 説明 |
|---|---|
| -p | ポートマッピングオプション |
| 8080:80 | 左側がホスト、右側がコンテナのポート |
これで、ブラウザから http://localhost:8080 にアクセスすれば、コンテナ内のWebサーバー(ポート80)に接続できます。
ポートフォワーディングに関連する一般的なエラーには、ポートがすでに他のプロセスに使用されているためにバインドできない場合や、ネットワーク設定が正しくない場合などがあります。
ポートが既に使用されている場合は、他のポートを使用するか、既存のプロセスを停止する必要があります。ネットワーク設定が正しくない場合は、ホストとコンテナの間で適切な通信ができるように設定を調整する必要があります。
具体的には、Dockerホストのポート番号を1つずらすなどして、使われていないポート番号に変更して実行します。例えば、「ports」のところで1つ目のコンテナに「8080:80」を2つ目のコンテナに「8081:80」のように指定します。

よく使用するホスト側のWebサービスのポート番号には、「80」「8080」「10080」などがあります。
よくあるトラブル
| エラー内容 | 原因 | 対処法 |
|---|---|---|
| ポート競合 | 同じポートを他のサービスが使用中 | 別のポート番号に変更(例:8081:80) |
| ネットワーク設定ミス | Compose定義が不正 | networks の設定を確認 |
🧱 Docker Composeで明示的にネットワークを定義する
Composeでは、ネットワークを手動で作成してサービスごとに割り当てることができます。
例:compose.yaml
services:
web:
image: nginx
networks:
- mynetwork
db:
image: mysql
networks:
- mynetwork
networks:
mynetwork:この設定では、mynetwork というネットワークが作成され、web と db コンテナが同じネットワーク内で通信できるようになります。
Composeは、ネットワーク名やDNS名を自動で解決してくれるので非常に便利です。
🧩 実践:WordPress+MariaDBコンテナの構築
では実際に、Docker Composeで WordPress+MariaDB の連携環境を作ってみましょう。
構成はこんな感じです👇

📁 compose.yamlを作成する手順
1.作業ディレクトリへ移動
cd desktop/docker実行結果
PS C:\Users\joeac> cd desktop/docker
PS C:\Users\joeac\Desktop\docker>2.プロジェクトフォルダを作成
mkdir wordpress3
cd wordpress3実行結果
PS C:\Users\joeac\Desktop\docker> mkdir wordpress3
Directory: C:\Users\joeac\Desktop\docker
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2025/10/12 21:24 wordpress3
PS C:\Users\joeac\Desktop\docker> cd wordpress3
PS C:\Users\joeac\Desktop\docker\wordpress3>3.VS Codeを起動して編集
code compose.yamlVSCodeが起動します。

実行結果
PS C:\Users\joeac\Desktop\docker\wordpress3> code compose.yaml4.以下の内容を保存
services:
wpdb:
image: mariadb:10.8
environment:
MARIADB_ROOT_PASSWORD: root-pass
MARIADB_DATABASE: database
MARIADB_USER: wp-user
MARIADB_PASSWORD: wp-pass
networks:
- wpnetwork
volumes:
- db-data:/var/lib/mysql
wordpress:
image: wordpress:6.5
depends_on:
- wpdb
networks:
- wpnetwork
environment:
WORDPRESS_DB_HOST: wpdb
WORDPRESS_DB_NAME: database
WORDPRESS_DB_USER: wp-user
WORDPRESS_DB_PASSWORD: wp-pass
ports:
- "8080:80"
volumes:
- wp-data:/var/www/html
networks:
wpnetwork:
volumes:
db-data:
wp-data:🧾 各設定項目の説明
| 項目 | 内容 |
|---|---|
| services | 作成するコンテナを定義 |
| image | 使用するDockerイメージ |
| environment | 環境変数を設定(DB情報など) |
| networks | 接続するネットワーク名 |
| depends_on | 起動順序(wpdb→wordpress) |
| ports | ポートフォワーディング設定 |
| volumes | 永続化データの保存場所 |
依存関係を定義しておくと、WordPressがDBより先に起動しないよう制御できます。
🚀 コンテナの作成と実行
作成したcompose.yamlがあるディレクトリで、次のコマンドを実行します。
docker compose up -d主なオプション
| オプション | 説明 |
|---|---|
| up | コンテナを作成・起動 |
| -d | バックグラウンドで実行(デタッチドモード) |
実行結果
PS C:\Users\joeac\Desktop\docker\wordpress3> docker compose up -d
[+] Running 31/31
(省略)
[+] Running 5/5
✔ Network wordpress3_wpnetwork Created 0.1s
✔ Volume wordpress3_db-data Created 0.0s
✔ Volume wordpress3_wp-data Created 0.0s
✔ Container wordpress3-wpdb-1 Started 2.6s
✔ Container wordpress3-wordpress-1 Starte... 0.7s
PS C:\Users\joeac\Desktop\docker\wordpress3>これで、wpnetworkネットワーク上にWordPressとMariaDBのコンテナが起動しました。
🌍 WordPressにアクセスして確認
ブラウザで以下のURLを開きます。
http://localhost:8080WordPressの初期セットアップ画面が表示されれば成功です!

言語を「日本語」にして次へ進めると、初期設定を進められます。

🧠 Dockerネットワークの確認
ネットワークが正しく作成されたかを確認します。
docker network ls実行結果
PS C:\Users\joeac\Desktop\docker\wordpress3> docker network ls
NETWORK ID NAME DRIVER SCOPE
ec526007458b bridge bridge local
edc5f4ea708e host host local
0b1b4553af27 none null local
8492d7e27310 wordpress3_wpnetwork bridge localさらに詳細を見たい場合
docker network inspect wordpress3_wpnetwork実行結果
PS C:\Users\joeac\Desktop\docker\wordpress3> docker network inspect wordpress3_wpnetwork
[
(省略)
},
"ConfigOnly": false,
"Containers": {
"8e63cac20f936e70ea8efafb0dcf82140a16a3bad7bc776ec81276959f194ac1": {
"Name": "wordpress3-wordpress-1",
"EndpointID": "055c5bba1055fc0a8ab40b9e516a17a0b7475b1b3275a558b6ae58b306c6bd8d",
"MacAddress": "8a:d5:47:33:8f:7d",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
},
"cf7cf8d7bc36080d1c84dcbe3ad198049209ec6b9866e8d50c8c9a21a0ae6e9a": {
"Name": "wordpress3-wpdb-1",
"EndpointID": "55559d29d19adbd67da114c029701a9b7940d1b23e2ba1d2e6075b55e2866c81",
"MacAddress": "ea:43:1d:19:dd:1b",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
(省略)
}
]
PS C:\Users\joeac\Desktop\docker\wordpress3>出力の中に、以下のような項目があります。
| 項目 | 意味 |
|---|---|
| Name | ネットワーク名 |
| Driver | 使用ドライバ(bridge) |
| Containers | 接続しているコンテナ一覧(wordpress, wpdb) |
| IPv4Address | 各コンテナのIPアドレス |
この結果から、WordPressとMariaDBが同じネットワーク内にいることが確認できます。
🔍 ポート番号の紐づけを確認
docker container ls実行結果
PS C:\Users\joeac\Desktop\docker\wordpress3> docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8e63cac20f93 wordpress:6.5 "docker-entrypoint.s…" 7 minutes ago Up 7 minutes 0.0.0.0:8080->80/tcp, [::]:8080->80/tcp wordpress3-wordpress-1
cf7cf8d7bc36 mariadb:10.8 "docker-entrypoint.s…" 7 minutes ago Up 7 minutes 3306/tcp wordpress3-wpdb-1ホストの8080番ポートがコンテナの80番ポートに転送されており、
MariaDBは内部で3306番ポートを使用していることがわかります。
🎯 まとめ
Docker Composeを使えば、ネットワーク設定も自動化され、
複数コンテナ間の通信をシンプルに構築できます。
- Composeが自動で専用ネットワークを作成
- サービス名でコンテナ同士が通信可能
- ポートフォワーディングで外部アクセスを許可
次のステップでは、複数ネットワークを組み合わせたより高度な構成や、
外部DBとの接続などにも挑戦してみましょう!
