ruby-on-rails - Docker、Rails、Postgres - 找不到数据库服务错误
问题描述
Dockerfile
FROM ruby:2.6.3
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /paper_scammer_docker
WORKDIR /paper_scammer_docker
COPY Gemfile /paper_scammer_docker/Gemfile
COPY Gemfile.lock /paper_scammer_docker/Gemfile.lock
RUN bundle install
COPY . /paper_scammer_docker
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]
码头工人-compose.yml
version: '3'
services:
db:
image: postgres:10
ports:
- "5432:5432"
volumes:
- ./tmp/db:/var/lib/postgresql/data
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/paper_scammer_docker
ports:
- "3000:3000"
links:
- "db:db"
depends_on:
- db
我可以使用以下命令成功构建映像
docker-compose build
如果我docker-compose up
在项目根目录中执行此操作,我的应用程序运行良好,我可以看到两个容器,一个用于我的 rails 应用程序,另一个用于 postgres docker container ls
。我观察到 postgres 图像是从库中加载的。
数据库.yml 文件
# SQLite version 3.x
# gem install sqlite3
#
# Ensure the SQLite 3 gem is defined in your Gemfile
# gem 'sqlite3'
#
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
host: db
username: postgres
password:
# user: gnpsllco_papaer
# password: sharma@123
development:
<<: *default
database: paper_scammer_development
# user: postgres
# password: sharma@123
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
<<: *default
database: paper_scammer_test
# user: postgres
# password: sharma@123
production:
<<: *default
database: gnpsllco_paper_scammer
问题
我运行以下命令从我的 rails 应用程序的映像启动 docker 容器。
sudo docker run -p 3000:3000 paperscammer_web
postgres 容器未运行或丢失。
我想了解这个dockerfile-compose如何处理这个问题,当我旋转rails应用程序的图像时,它说它依赖于postgres服务,它不应该也旋转一个postgres容器并将'db'设置为连接主机。
还是需要为 postgres 手动旋转。
运行http://localhost:3000时出现以下错误
could not translate host name "db" to address: Name or service not known
我可以看到 postgres 容器没有运行。
谢谢
解决方案
sudo docker run -p 3000:3000 paperscammer_web
将仅启动 Web 服务器,您需要运行docker-compose
:
sudo docker-compose up -d --build
第二种选择:
sudo docker run --name db -p 5432:5432 -v ./tmp/db:/var/lib/postgresql/data postgres:10
sudo docker run -p 3000:3000 --link db:db -v .:/paper_scammer_docker paperscammer_web
推荐阅读
- asp.net - 引导模式未显示在基本 ASP.NET Core Web 角度应用程序中
- docker - Docker 与 Docker-compose 与 dockerignore
- php - 仅修改属于较大字符串的特定字符串
- javascript - 如何使用 JavaScript 操作选定选项的值与选项文本相同
- discord.js - 有没有办法检查不和谐机器人是否加入服务器?
- node.js - 将包移植到 NodeJS 并遇到 Buffer.alloc() 问题
- webots - 更改 webbots 中的全局坐标系
- r - geom_point 中的 R 填充百分比
- excel - VBA:函数返回#VALUE
- azure - 如何在 MAPR 文件系统和 HDInsight Blob 存储之间进行 distcp