我正在运行两个码头集装箱。一个带有rails,一个带有Postgres db。 这是我的docker-compose文件:
# Docs: https://docs.docker.com/compose/compose-file/
version: '2'
services:
db:
image: postgres
environment:
- POSTGRES_PASSWORD=xxx
rails:
build: .
command: rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/app
ports:
- "3000:3000"
links:
- db
depends_on:
- db
这里是rails app的Dockerfile:
FROM ruby:2.3
RUN apt-get update
RUN apt-get install -y build-essential nodejs
RUN mkdir -p /app
WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN gem install bundler && bundle install --jobs 20 --retry 5
COPY . ./
EXPOSE 3000
ENTRYPOINT ["bundle", "exec"]
CMD ["rails", "server", "-b", "0.0.0.0"]
当我运行docker-compose up
时,一切正常,我可以通过docker-machine的ip地址连接到服务器。
当我尝试使用以下命令连接到容器时:
docker-compose run rails console
我收到此错误:
Could not find rake-11.1.2 in any of the sources
Run `bundle install` to install missing gems.
在容器内部进行捆绑安装没有任何效果,并且明确安装了所提到的gem。在其他堆栈溢出问题中提到我应该运行bin/spring stop
。所以我跑了:
docker-compose run bin/spring stop
它返回:
Spring is not running
我仍然是ruby / rails和docker的新手。我希望有人可以帮助我! 提前致谢
PS:对Dockerfiles的评论表示赞赏!
答案 0 :(得分:1)
似乎是一个迟到的回应,但无论如何我都会回答。我的有根据的猜测是,您的Gemfile.lock
正在固定您的rake
版本,这就是为什么它会抱怨。如果您运行的docker build
没有像docker-compose.yml
中那样定义的卷,则可以轻松地像这样结束。所以试一试。
关于您的Dockerfile
:如果您仅将此用于开发目的,那么这可能没问题。否则,您应该考虑使用其他用户运行它(使用useradd
创建用户并运行RUN
任务等等。您可能还想使用某些捆绑器功能,例如--path=<path>
选项。
答案 1 :(得分:0)
我们遇到了完全相同的问题。尽管Spring说它没有运行,但我的同事向我指出,如果我调查bin/rails
我会发现它实际上会与Rails一起运行。删除spring
中的Gemfile
相关宝石解决了这个问题。
答案 2 :(得分:0)
我设法通过在Dockerfile
中使用此命令来解决此问题。
RUN bundle install --without development test --with runtime --deployment