やりたいこと
- Docker上に構築したec-cubeのDB(mySQL)にこれまた別のDockerで構築したrailsアプリから接続したい
- railsとec-cubeでそれぞれ別のdocker-composeファイルが存在する
- どういう設定したらrailsからec-cubeのDBのコンテナが見れるのかわかんない
解決した方法
- 別docker-compose 同士のネットワークを繋げる設定をした
- 具体的にはrailsとec-cubeを同じネットワーク内に所属させ、コンテナ名で参照できるようにした
- こちら参考にさせていただきました。ありがとうございます・・・・!
設定ファイルとか
- railsアプリ側の「docker-compose.yml」と「database.yml」の設定
# docker-compose.yml: 「networks」がポイント
version: '3.7'
services:
app:
build: .
command: /bin/bash -c "rm -f /opt/test_api/api/tmp/pids/server.pid && bundle exec rails s -b 0.0.0.0"
volumes:
- ".:/app"
ports:
- "3000:3000"
tty: true
networks:
- [DBコンテナのネットワーク名]
networks:
[DBコンテナのネットワーク名]:
external: true
DBコンテナのネットワーク名は以下のコマンドで確認すると◎
docker network list
# 「NAME」部分を指定する
NETWORK ID NAME DRIVER SCOPE
xxxxxxxxxxxx bridge bridge local
xxxxxxxxxxxx sampleapp_backend bridge local
xxxxxxxxxxxx rails_api_default bridge local
# database.yml
# host はDBのコンテナ名を指定する
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: root
host: mysql_1
port: 3306
development:
<<: *default
database: sampledb
test:
<<: *default
database: app_test
production:
<<: *default
database: app_production
username: app
password: <%= ENV['APP_DATABASE_PASSWORD'] %>
コンテナ名は以下のコマンドで確認しましょう◎
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
xxxxxxxxxxxx sample_app "/bin/bash -c 'rm -f…" 18 minutes ago Up 18 minutes 0.0.0.0:3000->3000/tcp sample_app_1
xxxxxxxxxxxx mysql:5.7 "docker-entrypoint.s…" About an hour ago Up About an hour 33060/tcp, 0.0.0.0:13306->3306/tcp mysql_1
ネットワークを共有する、、
確かに言われてみればそうか!だけど、最初全然わかんなかった。。
ec-cubeの設定ファイル、MySQLで立ち上げるときはノーマルdocker-composeとMySQL用docker-composeファイルが分かれてて、中でネットワークの指定して共有してますもんね。
それを応用して考えればよかったのか
応用が効かないのは小学生の頃から変わってないらしい ←