ruby-on-rails - 为什么我的 Rails 容器没有连接到我的 Postgres 容器?

标签 ruby-on-rails postgresql docker docker-compose ruby-on-rails-5

我是 docker rails 的新手,正在尝试按照此处的说明在 docker 容器中实现现有的 rails 项目:https://hackernoon.com/dockerizing-an-existing-rails-postgresql-app-with-docker-compose-a30a7e1b3f40

docker-compose.yml

version: '3'
services:
 web:
  build: .
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  volumes:
   - .:/myapp
  ports:
   - "3000:3000"
  depends_on:
   - db
 db:
  image: postgres
  volumes:
   - ./tmp/db:/var/lib/postgresql/data

数据库.yml

default: &default
 adapter: postgresql
 encoding: unicode
 host: db
 username: postgres
 pool: 5
development:
 <<: *default
 database: myapp_development

docker 文件

FROM ruby:2.5.3
RUN apt-get update && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

所有容器都已创建并启动得很好。运行 docker-compose up 后,我可以从控制台输出中看到这一点。我什至可以连接到 Rails 服务器。但是,rails 服务器无法连接到 postgres 服务器:

enter image description here

我的 docker 配置中是否缺少某些东西,或者我是否需要更改 docker 的 rails 配置?

最佳答案

这个错误看起来像是没有为 postgres 转发端口尝试更改 docker-compose 以转发端口

我对 Docker 没有太多经验,但我认为您会发现当您重新启动 docker 容器时,您的数据库没有持久化。我建议为数据库使用外部卷

你的 Dockerfile 看起来不错

如果有更多经验的人看到这个请在评论中确认

docker-compose.yml

version: '3'
services:
 web:
  build: .
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  volumes:
   - .:/myapp
  ports:
   - "3000:3000"
  depends_on:
   - db
 db:
  image: postgres
  volumes:
   - pg-db:/var/lib/postgresql/data
   - ../db:/db
  ports:
   - "5432:5432"
 volumes:
   pg-db:
     external: true

数据库.yml

default: &default
 adapter: postgresql
 encoding: unicode
 host: db
 username: postgres
 pool: 5
development:
 <<: *default
 database: myapp_development

docker 文件

FROM ruby:2.5.3
RUN apt-get update && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

关于ruby-on-rails - 为什么我的 Rails 容器没有连接到我的 Postgres 容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56133733/

相关文章:

ruby-on-rails - 符号的自定义 f.label?

python - Django 测试错误 "Permission denied to create database"- 使用 Heroku Postgres

mysql - 在 Postgresql 查询中转换 Mysql 查询

php - Laravel - 格式错误的 UTF-8 字符,可能编码不正确

docker - docker和rkt的本质区别是什么?

amazon-web-services - Spring云数据流: Cannot run program "docker"

docker - gitlab runner 使用错误的 docker 镜像构建容器

mysql - 使用 Rails 从组数组中检索拥有所有组的用户

ruby-on-rails - FriendlyId 在模型验证之前触发。我该如何解决这个问题?

ruby-on-rails - 将单个记录合并到事件记录关系中