2016-08-14 6 views
2

У меня есть контейнер докеров, в котором есть приложение django. Статические файлы создаются и копируются в статическую папку.
контейнер иерархии папок:выставлять файлы из контейнера докеров на сервер

- var 
    - django 
     - app 
     - static 

, прежде чем я строить Docker образ, я запустить ./manage.py collectstatic так статические файлы находятся в папке /var/django/static. Чтобы открыть приложение и обслуживать статические файлы, у меня на хосте есть nginx. Проблема в том, что если я делаю тома между статической папкой и назначенной папкой на хосте, когда я запускаю контейнер докера, папка /var/django/static в контейнере удаляется (ну, а не удаляется, но монтируется). Есть ли способ преодолеть это? как установить громкость, но сказать, что докер также принимает текущие файлы?

+0

Почему бы не построить 'nginx' Docker изображение вместо этого? Итак, что вы будете делать здесь, это сделать то, что необходимо для «создания» вашего веб-приложения django, а затем добавить (используя ключевое слово ADD' для dockerfile), чтобы вставить статические файлы в образ nginx? –

+0

, потому что это то, как работает наш qa/integration/production env. nginx находится на хосте и не работает на докере. –

+0

Я вижу. Таким образом, вы смотрите на сбор файлов контейнера на хост, который довольно нетрадиционен, потому что люди обычно делают это наоборот. Итак, в чем заключается цель иметь контейнер, в котором вас интересуют только его файлы? Почему не просто символическая ссылка статического каталога файлов в каталог, который 'ngix' будет обслуживать свои файлы. –

ответ

1

Объемы обрабатываются как крепления в Docker, что означает, что каталог хоста всегда будет монтироваться по каталогу контейнера. Другими словами, то, что вы пытаетесь сделать, в настоящее время невозможно с томами Docker.

Смотрите этот вопрос GitHub для обсуждения по этому вопросу: https://github.com/docker/docker/issues/4361

Возможным обходным будет иметь объем Docker в пустой каталог в контейнере, а затем в вашей команде Docker RUN (или запуска -up), скопируйте статическое содержимое в этот пустой каталог, который монтируется в качестве тома.

+0

Мое решение было близко к твоему. После того, как я запустил контейнер и смонтировал том, я просто запустил anothe collectstatic команду, которая переполняла том файлами. –

0

Еще одно интересное решение: 1. Установите SSHd 2. Установите SSHFS на хост 3. папку Mount внутри Docker контейнера снаружи (хозяина) по SSHFS