昨日は docker-compose.yml 1つ に コンテナを2つ という構成でしたが、本日は docker-compose.yml が2つです。
docker-compose を分けるとネットワークが別れてしまう
(mysql)
services: mysql: image: mysql:latest container_name: mysql restart: always environment: MYSQL_ROOT_PASSWORD: root volumes: - ./db/data:/var/lib/mysql ports: - 3306:3306
$ docker compose up -d ~省略~ [+] Running 2/2 ✔ Network mysql_default Created 0.3s ✔ Container mysql Started
mysql_default
というネットワークが自動的に出来ます
(app)
FROM python:3.11.10-slim-bullseye RUN apt update -y RUN apt install default-mysql-client -y
services: app: build: context: . container_name: app tty: true
$ docker compose up -d ~省略~ ✔ Network my_app_default Created 0.4s ✔ Container app Started
こちらでは
my_app_default
というネットワークが自動的に出来ました
昨日 はというと、
1つの docker-compose.yml に 2つのコンテナ の構成にしましたので、
偶然? 同じネットワーク内に app も mysql も居た のでした。
本日の状態ではもちろん接続できません。
$ docker compose exec app bash root@6d3764e95a9c:/# mysql -h mysql -u root -p Enter password: ERROR 2005 (HY000): Unknown MySQL server host 'mysql' (-3)
同じネットワークに所属するようにする
今回は、自動的に出来た
mysql_default
のネットワークを間借りして、app コンテナも所属させる作戦です。
一度コンテナを破棄しておきます
$ docker compose down [+] Running 2/2 ✔ Container app Removed 11.2s ✔ Network my_app_default Removed
app の docker-cmopose を書き換える
services: app: build: context: . container_name: app tty: true + networks: + - mysql_default + + networks: + mysql_default: + external: true # どこかにある mysql_default というネットワークを使用する
コンテナを立て直す
$ docker compose up -d ~省略~ ✔ Container app Started
今度はネットワークが自動生成されませんでした。
動作確認
コンテナに潜って MySQL にログイン
$ docker compose exec app bash root@971a3ec3cb7f:/# mysql -h mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 9.0.1 MySQL Community Server - GPL Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | my_db | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.014 sec) MySQL [(none)]>
できた
まとめ
docker-compose 間の通信の仕方を学んだ