我找不到从docker-compose.yml
文件执行以下命令的方式:
rails db:setup
rails db:init_data
。我尝试按照以下步骤进行操作,但失败了:
version: '3'
services:
web:
build: .
links:
- database
- redis
ports:
- "3000:3000"
volumes:
- .:/usr/src/app
env_file:
- .env/development/database
- .env/development/web
command: ["rails", "db:setup"]
command: ["rails", "db:init_data"]
redis:
image: redis
database:
image: postgres
env_file:
- .env/development/database
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
关于这里出了什么问题的任何主意吗?谢谢。 代码源位于GitHub上。
答案 0 :(得分:0)
我认为您可以做两件事:
Locals Dam
112 8.73
113 4.496
114 0.666
115 0
116 2.865
117 -3.008
118 1.998
119 -12.78
更改为以下行,因为在撰写文件中不允许使用两个命令:command: - /bin/bash - -c - | rails db:setup rails db:init_data
答案 1 :(得分:0)
对我有用的解决方案是从CMD
中删除Dockerfile
,因为在command
中使用docker-compose.yml
选项会覆盖CMD
命令。
因此,Docker文件将如下所示:
FROM ruby:2.5.1
LABEL maintainer="DECATHLON"
RUN apt-get update -yqq
RUN apt-get install -yqq --no-install-recommends nodejs
COPY Gemfile* /usr/src/app/
WORKDIR /usr/src/app
RUN bundle install
COPY . /usr/src/app/
然后将command
选项添加到docker-compose
文件中:
version: '3'
services:
web:
build: .
links:
- database
- redis
ports:
- "3000:3000"
volumes:
- .:/usr/src/app
env_file:
- .env/development/database
- .env/development/web
command:
- |
rails db:reset
rails db:init_data
rails s -p 3000 -b '0.0.0.0'
redis:
image: redis
database:
image: postgres
env_file:
- .env/development/database
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
如果上述解决方案不适用于某人,则有另一种解决方案:
在项目路径中创建一个shell脚本并将其命名为entrypoint.sh
,例如:
#!/bin/bash
set -e
bundle exec rails db:reset
bundle exec rails db:migrate
exec "$@"
在entrypoint
文件中声明dpcker-compose
选项:
v
version: '3'
services:
web:
build: .
entrypoint:
- /bin/sh
- ./entrypoint.sh
depends_on:
- database
- redis
ports:
- "3000:3000"
volumes:
- .:/usr/src/app
env_file:
- .env/development/database
- .env/development/web
command: ['./wait-for-it.sh', 'database:5432', '--', 'bundle', 'exec', 'rails', 's', '-p', '3000', '-b', '0.0.0.0']
database:
image: postgres:9.6
env_file:
- .env/development/database
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
我还使用wait-for-it脚本来确保数据库已启动。
希望这会有所帮助。我将修改推送到Github存储库。抱歉,代码块之前的文本中还有一些多余的字母,由于某些未知原因,代码降价功能无法正常工作,所以我让他们让它正常工作。