Joã*_*uza 26 ruby-on-rails docker dockerfile docker-compose
我刚刚阅读了有关在Docker中运行Rails开发环境的这篇文章.好文章,效果很好.设置完所有后,我决定继续设置生产环境.
目标:
我希望rake db:create && rake db:migrate
每次运行我的泊坞窗图像.
问题:
如果我移动数据库创建和迁移步骤...
docker-compose run app rake db:create
docker-compose run app rake db:migrate
Run Code Online (Sandbox Code Playgroud)
...进入Dockerfile ...
RUN rake db:create && rake db:migrate
Run Code Online (Sandbox Code Playgroud)
......会引发错误......
could not translate host name "postgres" to address: Name or service not known
Run Code Online (Sandbox Code Playgroud)
...因为host
我database.yml
...
default: &default
adapter: postgresql
encoding: unicode
pool: 5
timeout: 5000
username: postgres
host: postgres
port: 5432
development:
<<: *default
database: rails_five_development
Run Code Online (Sandbox Code Playgroud)
...设置为postgres
我的docker-compose.yml
...中指定的服务名称
version: "2"
services:
postgres:
image: postgres:9.5
ports:
- "5432"
app:
build: .
command: rails server -p 3000 -b '0.0.0.0'
volumes:
- .:/app
ports:
- "3000:3000"
links:
- postgres
Run Code Online (Sandbox Code Playgroud)
......因为这是文章指出的推荐做法.
题:
rake db:create && rake db:migrate
每次运行docker镜像时如何自动进行?
Ho *_*Man 20
来自https://docs.docker.com/engine/reference/builder/#cmd:
如果您希望容器每次都运行相同的可执行文件,那么您应该考虑将ENTRYPOINT与CMD结合使用.请参阅ENTRYPOINT
https://docs.docker.com/engine/reference/builder/#entrypoint
TL;博士
您可以定义一个entrypoint
under app并在那里定义一个bash文件:
app:
entrypoint: [bin/entry]
..
Run Code Online (Sandbox Code Playgroud)
bin/entry文件示例:
#!/bin/bash
set -e
rake db:create
rake db:migrate
exec "$@"
Run Code Online (Sandbox Code Playgroud)
Dan*_*ohn 15
如果迁移无法成功,此方法将创建数据库.它还避免了因为丢失了pid文件而无法启动服务器的问题.将文件创建为app/lib/docker-entrypoint.sh
.
#!/bin/sh
# https://stackoverflow.com/a/38732187/1935918
set -e
if [ -f /app/tmp/pids/server.pid ]; then
rm /app/tmp/pids/server.pid
fi
bundle exec rake db:migrate 2>/dev/null || bundle exec rake db:setup
exec bundle exec "$@"
Run Code Online (Sandbox Code Playgroud)
docker-compose.yml然后包括:
entrypoint: ["/app/lib/docker-entrypoint.sh"]
command: ["rails","server","-b","0.0.0.0","-p","3000"]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14374 次 |
最近记录: |