docker 图像中缺少预编译资产

Precompiled assets absent in the docker image

我正在尝试 运行 使用 docker 的简单 Rails 应用程序。

从数据容器中获取的源代码'app'。 'app' 数据容器也被 nginx 用于服务器预编译资产和静态文件。

但在运行宁'bundle exec rake assets:precompile'之后没有找到预编译资源。

我在 Mac OS X 上使用 docker 和 VirtualBox(Docker 版本 1.10.1,内部版本 9e83765)。

docker-compose.yml

version: '2'
services:
  web:
    build: .
    command: bundle exec puma
    env_file: .env
    environment:
      - RACK_ENV=production
      - RAILS_ENV=production
    volumes_from:
      - app
    ports:
      - "3000:3000"
    links:
      - db

  nginx:
    image: nginx
    ports:
      - "80:80"
    volumes_from:
      - app
    volumes:
      - /app/public:/usr/share/nginx/html:ro
      - /app/config/deploy/nginx.conf:/etc/nginx/conf.d/default.conf

  db:
    image: postgres
    env_file: .env
    volumes_from:
      - data

  app:
    image: busybox
    volumes:
      - /myapp/app:/app:rw
  data:
    image: busybox
    volumes:
      - /myapp/data:/var/lib/postgresql/data

Docker文件

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs

WORKDIR /app
ADD . /app

RUN gem install bundler && bundle install --jobs 20 --retry 5 --without development test && rake assets:precompile

VOLUME /app/public

我也试过没有 'VOLUME /app/public'

请指教可能是什么问题。

谢谢。

docker build 期间成交量 not mounted

运行 rake assets:precompile 任务 post 从装有卷的容器构建。

此外,从 Docker 1.9 开始,您不再需要 "data volume container"。 Volumes 可以独立存在。

$ docker volume create --name=app_public
$ docker run -v app_public:/public busybox sh -c "echo hello > /public/file.txt"
$ docker run -v app_public:/public busybox sh -c "cat /public/file.txt"