【发布时间】:2018-06-18 14:54:04
【问题描述】:
我想不通的一件事是如何设置数据库主机以防我们 dockerize Rail 应用程序?例如,Postgres DB 应该在开发机器上的 localhost 上运行。但是在 docker-compose 文件中,数据库服务有自己的名称, - 在该主机上,其他容器可以访问数据库,例如:
version: '3'
services:
web:
build: .
ports:
- "3000:3000"
volumes:
- .:/usr/src/app
env_file:
- .env/development/database
- .env/development/web
redis:
image: redis
database:
image: postgres
env_file:
- .env/development/database
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
大多数示例假设从容器内部执行与开发 Rails 相关的所有命令(创建模型、迁移等),例如
docker-compose exec web rails g scaffold User first_name:string last_name:string
要运行上述迁移,我必须运行
docker-compose exec web rails db:migrate
这样就可以了。但是为什么我需要在本地为我的开发人员运行 Docker 才能访问应用程序?
所以我回到我最初的基本问题: 生成应用程序时,database.yml 具有以下设置(用于 Postgres):
default: &default
adapter: postgresql
encoding: unicode
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: rails5-ember_development
这样,当 Postgres DB 在 localhost 上运行时,每个人都可以克隆项目并继续开发。现在当 dockerizing 应用程序时,如何更改/调整主机值, - localhost:5432 是默认值,以便应用程序可以在 Docker 容器中运行?
所以,继续我的问题是:
为了能够在 dockerized Rails 应用程序中模拟相同的行为,唯一的解决方案是在 development 以外的特殊环境中运行它吗?在这种情况下,我会将其添加到 database.yml 并设置与 docker-compose.yml 文件中相同的 DB 值(用户名、主机等)。
谢谢。
【问题讨论】:
-
您能调整一下您的问题吗?很难理解到底是什么问题!
-
我已经更新了问题,请参阅最后一段。谢谢。
-
我还是不明白你想达到什么目的。
-
@emix:我希望能够:将 Rails 应用程序 dockerize 并让它以相同的方式运行:在 Docker 容器中和本地,即能够在无需运行 Rails 生成器命令的经典方式,无需在它们前面加上
docker-compose exec ...。 -
如果我理解正确的话,你可以告诉 docker-compose 使用特定的入口点来实例化你的容器。您可以在 separate
docker-compose文件中执行此操作。
标签: docker docker-compose ruby-on-rails-5