经常遇到捆绑器加载错误而没有这样的文件Gemfile错误

时间:2016-06-29 09:47:46

标签: docker docker-compose dockerfile ruby-on-rails-4.2 docker-machine

以下是项目根目录中的docker文件: -

FROM ruby:2.2
MAINTAINER technologies.com

RUN apt-get update -qq && apt-get install -y build-essential

RUN apt-get install -y libxml2-dev libxslt1-dev

RUN apt-get install -y libqt4-webkit libqt4-dev xvfb

RUN apt-get install -y nodejs

ENV INSTALL_PATH /as_app

RUN mkdir -p $INSTALL_PATH

WORKDIR $INSTALL_PATH

COPY Gemfile Gemfile

RUN bundle install

COPY . .

EXPOSE 3000

CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]

以下是项目根目录中docker-compose.yml文件中的内容: -

as_web:
  build: .
  environment:
    - RAILS_ENV=development
    - QUEUE=*
    - REDIS_URL=redis://redis:6379
  volumes:
    - .:/as_app
  ports:
    - 3000:3000
  links:
    - as_mongo
    - as_redis
  command: rails server -b 0.0.0.0
as_mongo:
  image: mongo:latest
  ports:
    - "27017:27017"
as_redis:
  image: redis
  ports:
    - "6379:6379"
as_worker:
  build: .
  environment:
    - QUEUE=*
    - RAILS_ENV=development
    - REDIS_URL=redis://redis:6379
  volumes:
    - .:/as_app
  links:
    - as_mongo
    - as_redis
  command: bundle exec rake environment resque:work  

docker版本1.11.2,docker-machine版本0.8.0-rc1,docker-compose版本1.8.0-rc1,ruby 2.2.5,rails 4.2.4。

我的问题是: -

1)当我从项目根目录使用“docker-compose build”构建映像时,图像会在安装了gem的情况下成功构建。
2)但是,当我做“docker-compose up”as_web和as_worker服务退出时,代码为1和10。由于没有发现gemfile或.bundler而给出错误。当我通过bash登录图像并查看工作目录时,没有看到任何项目文件。

3)我想知道的知识是: -

i)当我启动终端时,我手动启动VirtualBox实例,如“docker-machine start default”
  ii)然后我执行命令“eval $(docker-machine env dev)”将当前shell指向virtualbox docker-daemon,所以在此之后我执行“docker build -t as_web”。终端给出类似“向docker守护进程发送当前构建上下文”的消息,

a)这条消息是说在VirtualBox中完成了吗?

如果我做“docker-compose build”,就不会出现像“发送......”这样的消息,

B)docker-compose是否指向虚拟框中的docker守护进程或者它是在localhost(myubuntuOS)中构建的,我有点困惑?

如果您需要任何额外信息,希望您了解详细信息。然后让我知道,感谢大家。快乐的编码。

1 个答案:

答案 0 :(得分:0)

docker-compose builddocker build都做同样的事情。他们都使用docker引擎API在虚拟框中构建图像。输出消息略有不同。

你的问题是因为:

 volumes:
- .:/as_app

您正在使用主机中的项目目录覆盖app目录。如果您尚未在主机上运行bundle install,则启动时文件将不在容器中。

您可以通过运行docker-compose run as_app bundle install

来解决此问题