「127.0.0.1」のサーバーへの Rails docker-compose ファイル接続、ポート 5432 が失敗しました
概要
私は現在、Docker Compose を使用して Docker 化された Web アプリケーションに取り組んでいます。 docker-compose.yml ファイルには、db と api という 2 つのサービスが定義されています。db は PostgreSQL コンテナー、api は Rails アプリケーションです。ただし、Rails アプリケーションから PostgreSQL サーバーに接続しようとすると、エラーが発生します。
.env
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_HOST=127.0.0.1
POSTGRES_DB=postgres
docker-compose.yml
version: "3.9"
x-app: &app
env_file:
- .env
stdin_open: true
tty: true
services:
db:
<<: *app
image: postgres:16.2
volumes:
- ./tmp/db:/var/lib/postgresql/data
environment:
DATABASE_URL: "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:5432/${POSTGRES_DB}"
ports:
- 5432:5432
api:
<<: *app
build: .
command: sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/app
- bundle-cache:/usr/local/bundle
- node_modules:/app/node_modules
ports:
- 3000:3000
depends_on:
- db
volumes:
bundle-cache: null
pg-data: null
node_modules:
Dockerfile
FROM ruby:3.2.3-alpine
RUN apk update --no-cache && apk add build-base tzdata nodejs libpq-dev postgresql-client --no-cache
WORKDIR /app
COPY . ./
RUN bundle install
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
Rails アプリケーションの DATABASE_URL 環境変数を「postgres://:@postgres:5432/」に更新しました。
解決策
この部分のようです:
environment:
DATABASE_URL: "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:5432/${POSTGRES_DB}"
APIサービス内にあるはずですよね?
また、POSTGRES_HOST は db (depends_on で使用した値) です。