2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

別docker-composeで立ち上げたDBを参照する

Last updated at Posted at 2021-07-17

やりたいこと

  • Docker上に構築したec-cubeのDB(mySQL)にこれまた別のDockerで構築したrailsアプリから接続したい
    • railsとec-cubeでそれぞれ別のdocker-composeファイルが存在する
    • どういう設定したらrailsからec-cubeのDBのコンテナが見れるのかわかんない

解決した方法

  • 別docker-compose 同士のネットワークを繋げる設定をした

設定ファイルとか

  • 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ファイルが分かれてて、中でネットワークの指定して共有してますもんね。
それを応用して考えればよかったのか:rolling_eyes:

応用が効かないのは小学生の頃から変わってないらしい ←

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?