簡體   English   中英

無法在 Rails 和 Postgres Docker 容器之間建立連接

[英]Cannot establish connection between Rails and Postgres Docker containers

我是 Docker 的新手,並嘗試使用 docker-compose 對 Rails 容器和 Postgres 容器進行 docker-compose 構建和啟動,但是當我嘗試轉到 localhost:3009 以查看“是的,你在 Rails 上”頁面時,我在 Rails 日志中獲取此錯誤:

Started GET "/" for 172.27.0.1 at 2020-10-05 12:40:18 +0000
backend_1   | Cannot render console from 172.27.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1
backend_1   |   
backend_1   | PG::ConnectionBad (could not connect to server: Connection refused
backend_1   |   Is the server running on host "postgres" (172.27.0.2) and accepting
backend_1   |   TCP/IP connections on port 5439?
backend_1   | ):

這是我的 docker-compose.yml:

version: '3'

volumes:
  db_data:
    driver: local
  app_data:
    driver: local

services:
  # database container
  postgres:
    image: postgres
    volumes:
      - app_data:/var/lib/postgresql/data
    ports:
      - 5439:5432
    environment:
      POSTGRES_DB: db_name
      POSTGRES_USER: user
      POSTGRES_PASSWORD: xxxxxx
    command: ["postgres", "-c", "log_statement=all"]
    restart: always

  app:
    build: ./server
    volumes:
      - ./server:/code
    ports:
      - "3009:3000"
    depends_on:
      - postgres
    environment:
      RAILS_ENV: development
      DATABASE_HOST: postgres
      DATABASE_PORT: 5439
      DATABASE_NAME: db_name
      DATABASE_USERNAME: user
      DATABASE_PASSWORD: xxxxxx
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"

這是 Dockerfile:

FROM ruby:2.7.1

WORKDIR /app

COPY . /app

# Install NodeJS and Yarn.
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update && apt-get install -y yarn

RUN yarn install --check-files

RUN bundle install

CMD ["rails", "server", "-b", "0.0.0.0"]

這是我的database.yml

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: <%= ENV['DATABASE_HOST'] %>
  port: <%= ENV['DATABASE_PORT'] %>
  database: <%= ENV['DATABASE_NAME'] %>
  username: <%= ENV['DATABASE_USERNAME'] %>
  password: <%= ENV['DATABASE_PASSWORD'] %>

development:
  <<: *default
  
test:
  <<: *default

我可以使用 172.27.0.1:5439 訪問 DBeaver 中的 pg 數據庫,但不能使用 172.27.0.2:5439,我不知道為什么 Rails 容器嘗試連接到該地址。

正如大衛·梅茲指出的那樣:

需要將DATABASE_PORT設置為普通PostgreSQL端口5432; 端口:對於容器間通信被忽略(和不必要)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM