この記事を参考にdockerでrails + mysql + springな環境を作ろうとしています。
その時にrailsコンテナとmysqlコンテナの接続がうまく行きません。
## エラー内容
docker-compose.yml
version: '2' services: rails: &app_base build: context: . dockerfile: "Dockerfile.dev" command: ["bundle", "exec", "rails", "s", "-p", "3000", "-b", "0.0.0.0"] env_file: - "./.env.dev" volumes: - ".:/app" volumes_from: - data ports: - "3000:3000" depends_on: - db tty: true stdin_open: true spring: <<: *app_base command: ["bundle", "exec", "spring", "server"] ports: [] tty: false stdin_open: false db: image: "mysql:5.6" environment: - "MYSQL_USER=mysql" - "MYSQL_PASSWORD=password" volumes_from: - data ports: - "5432:5432" data: image: "busybox" volumes: - "db:/var/lib/mysql" - "bundle:/usr/local/bundle" volumes: db: driver: local bundle: driver: local
.env.dev
DATABASE_HOST=db DATABASE_PORT=5432 DATABASE_USER=mysql DATABASE_PASSWORD=password
database.yml
default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: <%= ENV.fetch('DATABASE_USER') { 'root' } %> password: <%= ENV.fetch('DATABASE_PASSWORD') { 'password' } %> host: <%= ENV.fetch('DATABASE_HOST') { 'localhost' } %> port: <%= ENV.fetch('DATABASE_PORT') { 5432 } %> development: <<: *default database: app_development test: <<: *default database: app_test production: <<: *default database: app_production
このようにしてrailsとmysqlのコンテナを繋ぎたいのですが、
#<Mysql2::Error: Unknown MySQL server host 'db' (25)>
と表示されてうまく行きません。
docker-compose.ymlのrailsサービスのところに
depends_on: - db
と書いてあるので、ちゃんとmysqlのサービスが立ち上がってから、railsが立ち上がるようにしていますが、うまく行きません。
同じ方法でpostgresqlはうまくいったのですが・・・・
どなたか知見のある方教えていただけないででしょうか?
「ここが怪しい!」とかでも教えていただけると幸いです。
追記
docker-compose.ymlからrailsコンテナのportsの宣言を削除しました。
version: '2' services: rails: &app_base build: context: . dockerfile: "Dockerfile.dev" command: ["bundle", "exec", "rails", "s", "-p", "3000", "-b", "0.0.0.0"] env_file: - "./.env.dev" volumes: - ".:/app" volumes_from: - data ports: - "3000:3000" depends_on: - db tty: true stdin_open: true spring: <<: *app_base command: ["bundle", "exec", "spring", "server"] ports: [] tty: false stdin_open: false db: image: "mysql:5.6" environment: - "MYSQL_USER=mysql" - "MYSQL_PASSWORD=password" volumes_from: - data data: image: "busybox" volumes: - "db:/var/lib/mysql" - "bundle:/usr/local/bundle" volumes: db: driver: local bundle: driver: local
database.ymlからもportの設定を削除しました
config/database.yml
default: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: <%= ENV.fetch('DATABASE_USER') { 'root' } %> password: <%= ENV.fetch('DATABASE_PASSWORD') { 'password' } %> host: <%= ENV.fetch('DATABASE_HOST') { 'localhost' } %> development: <<: *default database: app_development test: <<: *default database: app_test production: <<: *default database: app_production
.env,dev
DATABASE_HOST=db DATABASE_USER=mysql DATABASE_PASSWORD=password
これでも#<Mysql2::Error: Unknown MySQL server host 'db' (25)>が出てしまいます・・・
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。