【问题标题】:Rake task seems not to write files in a Docker containerRake 任务似乎不会在 Docker 容器中写入文件
【发布时间】:2015-08-07 08:25:00
【问题描述】:

作为平台迁移的一部分,我正在尝试在本地生产中运行我的 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,则所有资产的文件都消失了。

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 docker boot2docker docker-compose


    【解决方案1】:

    隐藏容器文件夹 /myapp 由从本地文件夹 . 挂载的卷。

    当你想挂载它时,你需要确保所需的文件在本地文件夹中。当您不挂载该文件夹时,这些文件将在您的映像上可用。

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

    【讨论】:

      猜你喜欢
      • 2015-10-11
      • 2016-01-21
      • 1970-01-01
      • 2018-12-15
      • 2012-02-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多