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
中有文件并且将磁盘装载到同一文件夹时,原始文件将被隐藏。相反,该磁盘中的文件是可见的。
我正在尝试 运行 我的 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
中有文件并且将磁盘装载到同一文件夹时,原始文件将被隐藏。相反,该磁盘中的文件是可见的。