我是 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 服务器:
我的 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/