【发布时间】:2019-11-26 19:11:41
【问题描述】:
不知道如何问这个问题,因为我无法理解这个问题。另外,我不是码头专家,这可能是一个愚蠢的问题。
我有一个带有 docker-compose 的 Rails 项目。而且有2种情况。首先,我能够使用 docker-compose up 构建和运行应用程序,一切看起来都很好,问题是当我更改代码时代码没有重新加载。其次,当我在docker-compose.yml中添加一个volume时,docker-compose up因为找不到Gemfile而退出,挂载的文件夹是空的。
Dockerfile 和 docker-compose.yml 提取,我重命名了一些东西:
# File: Dockerfile.app
FROM ruby:2.5-slim-stretch
RUN apt-get update -qq && apt-get install -y redis-tools
RUN apt-get install -y autoconf bison build-essential #(..etc...)
RUN echo "gem: --no-document" > ~/.gemrc
RUN gem install bundler
ADD . /docker-projects
WORKDIR /docker-projects/project1/core
ENV BUNDLE_APP_CONFIG /docker-projects/project1/core/.bundle
RUN /bin/sh -c bundle install --local --jobs
# File: docker-compose.yml
app:
build: .
dockerfile: Dockerfile.app
command: /bin/sh -c "bundle exec rails s -p 8080 -b 0.0.0.0"
ports:
- "8080:8080"
expose:
- "8080"
volumes:
- .:/docker-projects
links:
- redis
- mysql
- memcached
我的 'docker-projects' 是一个由不同的 rails_engines 和 gems 库组成的大项目。我们使用“repo”工具来管理它。
运行 docker-compose build app 工作正常,我可以看到捆绑安装日志。然后 docker-compose up app 退出并出现错误“未找到 Gemfile”。
直到我决定从 docker 容器中恢复 50gb 的空间并重建所有东西之前,它都可以正常工作。不确定发生了什么变化。
如果我添加卷(docker-compose),安装的卷是空的。如果我删除卷(docker-compose),代码不会按原样重新加载。
我正在使用的版本:
Docker version 18.09.7, build 2d0083d
OSX 10.14.5
docker (through brew) with xhyve driver
我尝试了一个新的基本 docker-compose 项目,但没有遇到这个问题。有任何想法吗?我会继续寻找。
谢谢。
【问题讨论】:
-
你是否在 docker 文件中使用了复制指令,它将你的本地卷推送到容器卷中
-
docker-compose up exit,那你怎么知道mounted folder是空的? -
@atline 我收到错误“找不到 Gemfile”,我也能够运行 bash 并看到没有文件。
-
您不需要|想要复制 Dockerfile
ADD . /docker-projects和WORKDIR /docker-projects与 docker-compose.ymlvolumes: - .:/docker-projects。 -
如果您将
WORKDIR移动到ADD之前(并修改路径),那么您应该能够将前5 个RUN语句组合成一个RUN ... && ... && ...语句。每个RUN语句都会生成一个新的 docker 层。除非您需要这些不同的层,否则将它们组合起来会更有效。您可以使用rm -rf /var/lib/apt/lists/*完成此RUN块以清除已安装的软件包。
标签: ruby-on-rails docker docker-compose volumes