以下是项目根目录中的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登录image并看到工作目录时,看不到项目文件。
3)我想知道的知识是:-
i)当我启动终端时,我像"docker-machine start default“一样手动启动VirtualBox实例
ii)然后,我执行命令"eval $(docker-machine env dev)“将当前外壳指向virtualbox docker-daemon,因此在此之后,当我执行"docker build -t as_web”时。终端给出消息,如“发送当前构建上下文到docker守护进程”,
a)这条消息是不是说构建是在VirtualBox中完成的?
如果我做了"docker-compose build“,没有像”发送...“这样的消息。出现了,
B) docker-compose是指向虚拟机器中的docker守护进程,还是它是在本地主机(MyubuntuOS)中构建的,我有点困惑?
如果你们需要任何额外的信息,希望你们能理解细节。然后让我知道,感谢大家。祝你编码愉快。
发布于 2016-06-29 22:34:12
docker-compose build和docker build都做同样的事情。它们都使用docker engine API在virtualbox中构建镜像。输出消息只是稍有不同。
您的问题是由于以下原因:
volumes:
- .:/as_app您正在使用宿主中的项目目录覆盖app目录。如果您还没有在主机上运行bundle install,那么当它启动时,这些文件将不会在容器中。
您可以通过运行docker-compose run as_app bundle install来修复此问题
https://stackoverflow.com/questions/38096005
复制相似问题