【问题标题】:Unable to connect to Postgres database with Docker无法使用 Docker 连接到 Postgres 数据库
【发布时间】:2020-02-07 05:44:35
【问题描述】:

我正在使用 docker 运行 rails + Redis + Postgres,我终于设法让一切正常工作,唯一我不知道的是数据库。似乎无论我为主机/用户名/密码输入什么,我总是以连接被拒绝而告终

这是我的设置:

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 新手,所以我不确定我是否只是在这里遗漏了一些明显的东西

【问题讨论】:

    标签: ruby-on-rails postgresql docker


    【解决方案1】:

    使用 Docker Compose,服务(容器)会自动获得与服务名称相同的主机名。在您的情况下,您的 Postgres 服务的主机名是 database 而不是 localhost

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

    【讨论】:

      【解决方案2】:

      当你想通过 docker 连接到 PostgreSQL 服务器时,你必须像这样启动你为 postgresql 制作的 docker 容器 sudo docker start mysql-55-container

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-15
        • 2021-04-20
        • 2021-02-11
        • 1970-01-01
        • 1970-01-01
        • 2020-05-14
        • 2022-11-16
        • 2019-12-14
        相关资源
        最近更新 更多