概要
環境:Windows11 , WSL2 , Laravel9 , PHP8.1, nginx, mysql
開発環境で、二つのサービスはそれぞれ[WSL]内に別のdocker compose
を使って作成されている。
きなこStacks内のPHPコンテナから、あんこStacksのDBコンテナを見たい!と思った時。
ネットサーバーにつなぐ時と同じように、connection
を変えればいいものとばかり思っていたが、繋がらなかった。
HOST=localhost
PORT=7002
どうやらDockerコンテナ同士が通信するにはDocker Networkが必要だったよう。
・ 通常、コンテナどうしは自由に通信できるわけでは無い。
・ docker compose
でStacks
を形成すると、自動的にNetwork
が作成されることで、そのStacks
内での通信が可能になっていた(...defaultのような名前のもの)。
・ 別Stacks同士で通信を行うには、このDocker Network
を自分で作成しなければならない。
解決方法
1. 共有したいDBがある方のdocker-compose.yml
を修正する。
//...
services:
db:
networks:
- default
- omochi-shared-network
//...
networks:
omochi-shared-network:
internal: false
name: omochi_shared_network
これでDocker Network
が作成され、そのネットワークにあんこStacksのdb
コンテナが接続される。
2. 別StacksDBにアクセスしたい側のdocker-compose.yml
を修正する。
//...
services:
php:
networks:
- default
- omochi-shared-network
//...
networks:
omochi-shared-network:
external: false
name: omochi_shared_network
これでDocker Network
を通して、きなこStacksからあんこStacksのdb
コンテナへのアクセスが可能となる。
3. env
のホスト設定
Laravelの場合、この方法でDBにアクセスするときは
HOST=dbコンテナ名
//例 HOST=あんこ-db-1
にすることでアクセスが可能になる。
解説(もどき)
オプションのname
は作成するサービス名を指定できる。(指定しないとディレクトリの名前がくっついて長くなる。)
internal
とexternal
についてはこちらの記事が詳しい。というか全部この記事でよい。
注意点
コンテナ起動時に、指定されたDocker Network
が見つからない場合、コンテナが起動できない。
起動順を気を付ける必要がある。
なお、この記事にたどり着くまでにWSL内のコンテナがぐちゃぐちゃになっている場合、docker compose up -d --build
だけではうまくいかないことがある。
その場合はdocker compose up -d --build --force-recreate
で治る場合がある。
そして、Laravelのenv
もいじりまくっている場合は
php artisan config:clear
php artisan cache:clear
#https://qiita.com/Ping/items/10ada8d069e13d729701
キャッシュの削除も忘れずに。これで30分消費した。
駄文失礼しました。ちなみに餅はきなこ派です。
参考
https://www.timedia.co.jp/tech/20220628-tech/
https://tech.anti-pattern.co.jp/docker-compose/
https://matsu.teraren.com/blog/2022/05/28/error-response-from-daemon-network-not-found/
https://knowledge.sakura.ad.jp/16082/
https://qiita.com/YuitoSato/items/4a4b46f5670b45739a37