Невозможно подключиться к базе данных Postgres с Docker - PullRequest
0 голосов
/ 07 февраля 2020

Я использую rails + Redis + Postgres с docker, и мне удалось наконец заставить все работать, единственное, что я не могу понять, это база данных. кажется, что независимо от того, что я поставил для хоста / имени пользователя / пароля, я всегда получаю отказ в соединении

, вот мои настройки:

docker -compose.yml

version: '3.4'

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - database
      - redis
    ports:
      - "3000:3000"
    volumes:
      - .:/app
      - gem_cache:/usr/local/bundle/gems
    env_file: .env
    environment:
      RAILS_ENV: development

  database:
    image: postgres:12.1
    volumes:
      - db_data:/var/lib/postgresql/data
      - ./init.sql:/docker-entrypoint-initdb.d/init.sql
    environment:
      POSTGRES_USER: baopals
      POSTGRES_PASSWORD: baopals

  redis:
    image: redis:5.0.7

volumes:
  gem_cache:
  db_data:

networks:
  default:
    external:
      name: baopals-network

Dockerfile

FROM ruby:2.5.1-alpine

ENV BUNDLER_VERSION=1.16.1

RUN apk add --update --no-cache \
      binutils-gold \
      build-base \
      curl \
      file \
      g++ \
      gcc \
      git \
      less \
      libstdc++ \
      libffi-dev \
      libc-dev \
      linux-headers \
      libxml2-dev \
      libxslt-dev \
      libgcrypt-dev \
      make \
      netcat-openbsd \
      openssl \
      pkgconfig \
      postgresql-dev \
      python \
      tzdata \
      nodejs

RUN gem install bundler -v 1.16.1

WORKDIR /app

ADD vendor/gems/active_elastic_job-2.0.1 /app/vendor/gems/active_elastic_job-2.0.1

COPY Gemfile Gemfile.lock ./

RUN bundle config build.nokogiri --use-system-libraries

RUN bundle check || bundle install

COPY . ./

ENTRYPOINT ["./entrypoints/docker-entrypoint.sh"]

.env

DB_NAME=baopals_development
DB_USER=baopals
DB_PASSWORD=baopals
DB_HOST=localhost
REDIS_HOST=redis

database.yml

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

development:
  <<: *default
  database: baopals_development
  username: baopals
  password: baopals
  host: localhost
  port: 5432

и, наконец, вот ошибка, с которой я сталкиваюсь

app_1       | PG::ConnectionBad (could not connect to server: Connection refused
app_1       |   Is the server running on host "localhost" (127.0.0.1) and accepting
app_1       |   TCP/IP connections on port 5432?
app_1       | could not connect to server: Address not available
app_1       |   Is the server running on host "localhost" (::1) and accepting
app_1       |   TCP/IP connections on port 5432?

Я новичок с docker, поэтому я не уверен, что я просто упустил что-то очевидное здесь

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

При Docker Compose, сервисы (контейнеры) автоматически получают имя хоста, идентичное имени сервиса. В вашем случае имя хоста для вашей службы Postgres равно database вместо localhost.

См. https://docs.docker.com/compose/networking/

0 голосов
/ 07 февраля 2020

Если вы хотите подключиться к PostgreSQL серверу через docker, вам нужно запустить docker контейнер, который вы создали для postgresql, например, sudo docker start mysql -55-container

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...