コンテンツにスキップ

Devcontainer と Docker in Docker の通信

Author: Murata
  • これ見てください。
  • 簡単にいうとローカルを汚さない開発環境を Docker 上につくる機能
  • 最近、CakePHP の勉強をしていて、とりあえず何か作ってみようとなった
  • ローカルを汚すのが嫌いなタイプなので、Docker 環境で本体も DB も動かしたくなった
  • そこで、DB と本体が接続できない不具合に 2 日くらい悩まされたため

(project-root)/.devcontainer/compose.yaml

services:
cakephp:
build:
context: .
dockerfile: Dockerfile
args:
USER_NAME: ${USER_NAME}
USER_UID: ${USER_UID}
USER_GID: ${USER_GID}
command: sleep infinity
networks:
- db-common-network
ports:
- "8765:8765"
env_file:
- ./.env
networks: # ここ!
db-common-network:
external: true

(project-root)/compose.yaml

services:
db:
build:
context: ./database
dockerfile: Dockerfile
container_name: chat-db
restart: always
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=password
- TZ=Asia/Tokyo
volumes:
- chat-db-data:/var/lib/mysql
command: mysqld --collation-server=utf8mb4_0900_bin --transaction-isolation=READ-COMMITTED
networks:
- db-common-network
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
timeout: 5s
retries: 1
volumes:
chat-db-data:
networks: # ここ!
db-common-network:
external: true
  • めちゃくちゃシンプルで、別の compose.yaml 同士で同一ネットワークを示せばよかった
  • 自分はそこのネットワーク部分について誤解していて、別ファイルに同じネットワーク情報書けば DockerEngine がいい感じにやってくれると知らんかった
  • 無事に接続できましたとさ