[英]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
。
当你想通过 docker 连接到 PostgreSQL 服务器时,你必须像这样启动你为 postgresql 制作的 docker 容器 sudo docker start mysql-55-container
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.