0
0

More than 1 year has passed since last update.

[WSL・Docker Compose]別々のStacks同士で通信を行う方法[Docker Network]

Last updated at Posted at 2023-04-14

概要

環境:Windows11 , WSL2 , Laravel9 , PHP8.1, nginx, mysql

Q用.jpg

開発環境で、二つのサービスはそれぞれ[WSL]内に別のdocker composeを使って作成されている。

きなこStacks内のPHPコンテナから、あんこStacksのDBコンテナを見たい!と思った時。
ネットサーバーにつなぐ時と同じように、connectionを変えればいいものとばかり思っていたが、繋がらなかった。

NG.env
HOST=localhost
PORT=7002

どうやらDockerコンテナ同士が通信するにはDocker Networkが必要だったよう。
・ 通常、コンテナどうしは自由に通信できるわけでは無い。
docker composeStacksを形成すると、自動的にNetworkが作成されることで、そのStacks内での通信が可能になっていた(...defaultのような名前のもの)。
・ 別Stacks同士で通信を行うには、このDocker Networkを自分で作成しなければならない。

解決方法

1. 共有したいDBがある方のdocker-compose.ymlを修正する。

あんこディレクトリ>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を修正する。

きなこディレクトリ>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にアクセスするときは

きなこPHP.env
HOST=dbコンテナ名
//例 HOST=あんこ-db-1

にすることでアクセスが可能になる。

解説(もどき)

オプションのnameは作成するサービス名を指定できる。(指定しないとディレクトリの名前がくっついて長くなる。)
internalexternalについてはこちらの記事が詳しい。というか全部この記事でよい。

注意点
コンテナ起動時に、指定された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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0