Docker компонуется с Rails, а Postgres не может подключиться к серверу: нет маршрута к хосту Является ли сервер

В настоящее время у меня проблема с моим docker-compose, у которого есть эти службы. Приложение Rails и Postgres. Это мои конфигурации:

докер-compose.yml

version: '3'
services:
 db:
  image: postgres:alpine
  restart: always
  volumes:
   - ./tmp/db:/var/lib/postgresql/data
  ports:
    - "5432:5432"
  environment:
    - POSTGRES_USER=postgres
    - POSTGRES_PASSWORD=postgres
  
 app:
  build: .
  restart: always
  command: bash -c "rm -f tmp/pids/server.pid && rails s -p 3000 -b '0.0.0.0'"
  volumes:
   - .:/myapp
   - bundle_path:/bundle
  ports:
   - "3000:3000"
  depends_on:
   - db

volumes:
  bundle_path:

Докерфайл

FROM ruby:2.5.3-slim

# install rails dependencies
RUN apt-get update -qq \
  && apt-get install -y \
  # Needed for certain gems
  build-essential \
  # Needed for postgres gem
  libpq-dev \
  # Others
  nodejs \
  vim-tiny \   
  # The following are used to trim down the size of the image by removing unneeded data
  && apt-get clean autoclean \
  && apt-get autoremove -y \
  && rm -rf \
  /var/lib/apt \
  /var/lib/dpkg \
  /var/lib/cache \
  /var/lib/log

# Changes localtime to Singapore
RUN cp /usr/share/zoneinfo/Asia/Singapore /etc/localtime

# create a folder /myapp in the docker container and go into that folder
RUN mkdir /myapp

WORKDIR /myapp

COPY Gemfile /myapp/Gemfile

COPY Gemfile.lock /myapp/Gemfile.lock

# Run bundle install to install gems inside the gemfile
RUN bundle install

ADD . /myapp

CMD bash -c "rm -f tmp/pids/server.pid && rails s -p 3000 -b '0.0.0.0'"

база данных.yml

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: myapp_development
  host: db
  username: postgres
  password: postgres
  port: 5432
  

Я могу создать приложение, используя docker-compose build, но всякий раз, когда я docker-compose up, служба db закрывается, но мои рельсы app работают.

Это журналы, которые я получаю, когда запускаю docker-compose up

db_1   | The files belonging to this database system will be owned by user "postgres".
db_1   | This user must also own the server process.
db_1   |
db_1   | The database cluster will be initialized with locale "en_US.utf8".
db_1   | The default database encoding has accordingly been set to "UTF8".
db_1   | The default text search configuration will be set to "english".
db_1   |
db_1   | Data page checksums are disabled.
db_1   |
db_1   | initdb: error: directory "/var/lib/postgresql/data" exists but is not empty
db_1   | If you want to create a new database system, either remove or empty
db_1   | the directory "/var/lib/postgresql/data" or run initdb
db_1   | with an argument other than "/var/lib/postgresql/data".

Ошибка, которую я получаю при доступе к http://localhost:3000:

could not connect to server: No route to host Is the server running on host "db" (172.18.0.2) and accepting TCP/IP connections on port 5432?
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
627
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я думаю, что вы должны использовать объем и для Postgres.

services:
  db:
    image: postgres:alpine
    restart: always
    volumes:
     - postgres_volume:/var/lib/postgresql/data
volumes:
  postgres_volume:

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

Теперь работает. Интересно, для моего другого приложения rails, которое использует docker-compose, мне не нужно монтировать объем postgres, и оно работает. Не уверен, что для этого он нужен.

AllenC 23.12.2020 07:51

Честно говоря, я не знаю, но я потратил некоторое время на проблемы с объемом, особенно с Postgres. Может быть, это плохая конфигурация с моей стороны, но я так и не понял, почему и как.

brcebn 23.12.2020 09:31

Другие вопросы по теме