繁体   English   中英

无法使用 Docker 连接到 Postgres 数据库

[英]Unable to connect to Postgres database with Docker

我正在使用 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

文件

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

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

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

请参阅https://docs.docker.com/compose/networking/

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM