Rake 任务似乎不会在 Docker 容器中写入文件

Rake task seems not to write files in a Docker container

我正在尝试 运行 我的 Rails 应用程序在本地生产中作为平台迁移的一部分。我正在使用 Docker 和 Docker Compose。

我 运行 遇到了 rake assets:precompile 的问题。看起来 docker 在构建过程中删除了生成的文件。

这是我的 Dockerfile

FROM ruby:2.2.2
RUN apt-get update -qq && apt-get install -y build-essential nodejs npm nodejs-legacy mysql-client vim
RUN mkdir /lunchiatto
ENV RAILS_ENV production
ENV RACK_ENV production
WORKDIR /tmp
COPY Gemfile Gemfile
COPY Gemfile.lock Gemfile.lock
RUN bundle install --without production test
ADD . /myapp
WORKDIR /myapp
RUN bundle exec rake assets:clobber
RUN bundle exec rake assets:precompile --trace

这是我的 docker-compose.yml

db:
  image: postgres:9.4.1
  ports:
    - "5432:5432"
  environment:
    RACK_ENV: production
    RAILS_ENV: production
web:
  build: .
  command: bundle exec puma -C config/puma.rb
  ports:
    - "3000:3000"
  links:
    - db
  volumes:
    - .:/myapp
  environment:
    RACK_ENV: production
    RAILS_ENV: production

docker-compose build 命令 运行 没问题。我还在 rake assets:precompile 之前和之后将 RUN ls -l /myapp/public/assets 插入到 Dockerfile 中,一切似乎都很好。但是,如果我 运行 docker-compose run web ls -l /myapp/public/assets 在不同选项卡中使用 docker-compose up 运行 构建后,所有资产文件都消失了。

容器在构建期间不太可能是只读的,那会是什么?

您通过从本地文件夹 ..

挂载的卷隐藏 容器文件夹 /myapp

挂载时需要确保需要的文件在本地文件夹内。当您不挂载该文件夹时,文件将在您的图像上可用。

效果类似于 Linux 系统:当文件夹 /my/folder 中有文件并且将磁盘装载到同一文件夹时,原始文件将被隐藏。相反,该磁盘中的文件是可见的。