以下是项目根目录中的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)中构建的,我有点困惑?
如果您需要任何额外信息,希望您了解详细信息。然后让我知道,感谢大家。快乐的编码。
答案 0 :(得分:0)
docker-compose build
和docker build
都做同样的事情。他们都使用docker引擎API在虚拟框中构建图像。输出消息略有不同。
你的问题是因为:
volumes:
- .:/as_app
您正在使用主机中的项目目录覆盖app目录。如果您尚未在主机上运行bundle install,则启动时文件将不在容器中。
您可以通过运行docker-compose run as_app bundle install