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

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

我遇到了rake assets:precompile问题rake assets:precompile 。 它看起来好像docker工人在构build过程中删除生成的文件。

这是我的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/assetsDockerfile rake assets:precompile和一切似乎都很好。 但是,如果我运行docker-compose run web ls -l /myapp/public/assets之后, docker-compose up build在不同的选项卡docker-compose up运行,所有资产的文件都不见了。

这个容器在构build过程中不太可能被读取,那可能是什么呢?

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

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

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