Сделать каталог из одного контейнера доступным для другого, сохраняя файлы из исходного - PullRequest
0 голосов
/ 13 декабря 2018

Допустим, у вас есть изображение с приложением Rails, содержащее ресурсы.И вы хотите обслуживать их из другого контейнера, на котором запущен Nginx.

Из того, что я понял, при монтировании тома содержимое каталога исчезает.Таким образом, если вы смонтируете один том в два контейнера, например,

volumes:
  assets:
services:
  app:
    volumes:
      assets:/app/public/assets
  nginx:
    volumes:
      assets:/assets

, они оба увидят пустую папку.Вы можете очень хорошо заполнить это вручную.Но если вы развернете более новую версию образа приложения Rails, эти два не увидят изменений.

Я что-то упустил?Есть ли способ обработки файлов без их передачи в приложение Rails или копирования их из контейнера в контейнер?

UPD Первый контейнер с непустым каталогом, в который монтируется том, определяет его начальное содержимое.

1 Ответ

0 голосов
/ 13 декабря 2018

Вы можете добавить следующие строки перед запуском Rails в свой образ Rails Dockerfile (CMD или ENTRYPOINT):

rm -r /assets/*
cp -r /app/public/assets/* /assets

и смонтировать том в /assets для обеих служб.

Таким образом, каждый раз, когда ваш контейнер перезапускается (на docker stack deploy, когда он изменяется), объем пополняется новыми ресурсами, которые видны для контейнера nginx.

...