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

Bar*_*ski 5 ruby-on-rails ruby-on-rails-4 docker boot2docker docker-compose

作为平台迁移的一部分,我正在尝试在本地生产我的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
Run Code Online (Sandbox Code Playgroud)

这是我的 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
Run Code Online (Sandbox Code Playgroud)

docker-compose build命令运行正常.我也插入RUN ls -l /myapp/public/assetsDockerfile前,后rake assets:precompile和一切似乎罚款.但是,如果我docker-compose run web ls -l /myapp/public/assets在构建之后docker-compose up运行并在另一个选项卡中运行,则所有资产的文件都将消失.

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

h3n*_*rik 3

您可以通过从本地文件夹安装的卷来隐藏容器文件夹。/myapp.

当您要挂载时,您需要确保所需的文件位于本地文件夹内。当您不安装该文件夹时,这些文件将在您的映像上可用。

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