Rails на docker: Mysql2 :: Error :: ConnectionError: Unknown MySQL хост сервера 'db' - PullRequest
0 голосов
/ 18 марта 2020

Rails и Docker

TL; DR : я пытаюсь организовать свое приложение rails, используя mysql с docker -композицией. У меня есть один контейнер с сервером mysql, а другой - пассажирский для обслуживания моего приложения. При сборке я получаю неизвестную ошибку хоста.


Здравствуйте,

Я хочу развернуть свое приложение Ruby на Rails с docker -compose. Поскольку я хотел использовать Passenger в качестве сервера приложений, я подумал, что было бы также неплохо использовать их baseimage . Приложение использует mysql в качестве базы данных. Приложение отлично работает в разработке. При попытке создать образ с помощью docker-compose build я получаю следующую ошибку:

** Invoke db:migrate (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:load_config
** Execute db:migrate
rake aborted!
Mysql2::Error::ConnectionError: Unknown MySQL server host 'db' (11)
/var/www/school/code/vendor/bundle/ruby/2.6.0/gems/mysql2-0.5.3/lib/mysql2/client.rb:90:in `
...

Я не совсем понимаю, почему он выдает эту ошибку, так как думал, что когда я использую зависящий от нее, он будет ждать другой контейнер чтобы начать.

Я все еще учусь. Обе рельсы и docker. Вот мои файлы compose и database.yml. Если есть что добавить, пожалуйста, дайте мне знать. Заранее спасибо!

# docker-compose.yml

# Using version 2 because of portainer where its supposed to run later on
version: "2.4"

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: school
    ports:
      - "3306:3306"

  app:
    build: 
      context: .
      dockerfile: ./docker/passenger.Dockerfile
    volumes:
      - .:/var/www/school
    ports:
      - "80:80"
    depends_on:
      - db

volumes:
  db_data: {}

А вот и моя database.yml

# database.yml

default: &default
  adapter: mysql2
  encoding: utf8
  reconnect: false
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

production:
  <<: *default
  username: root
  password: "password"
  database: school
  port: 3306
  host: db

1 Ответ

0 голосов
/ 18 марта 2020

Попробуйте изменить app раздел в docker-compose.yml на это:

app:
  build: 
    context: .
    dockerfile: ./docker/passenger.Dockerfile
  volumes:
    - .:/var/www/school
  ports:
    - "80:80"
  links:
    - db

Подробнее: Документы


Также у вас есть проделал очень хорошую работу, объясняя вопрос точно / правильно. Престижность!

...