2016-08-14 6 views
2

Ich habe einen Docker-Container, der eine Django-App enthält. Die statischen Dateien werden erzeugt und in einen statischen Ordner kopiert.
Container Ordnerhierarchie:Dateien aus Docker-Container zum Host aussetzen

- var 
    - django 
     - app 
     - static 

, bevor ich das Docker Bild bauen, ich laufe ./manage.py collectstatic so die statischen Dateien sind im /var/django/static Ordner. Um die App verfügbar zu machen und die statischen Dateien zu bedienen, habe ich auf dem Host ein nginx. Das Problem ist, dass, wenn ich ein Volume zwischen dem statischen Ordner und einem bestimmten Ordner auf dem Host, wenn ich den Docker-Container ausführen, der /var/django/static Ordner im Container wird gelöscht (na ja, nicht gelöscht, aber gemountet). Gibt es einen Weg, dies zu überwinden? wie in der Lautstärke einstellen, aber docker, die aktuellen Dateien auch zu nehmen?

+0

Warum nicht ein 'nginx' Docker Bild bauen statt? Also, was Sie hier tun würden, ist, was immer Sie tun müssen, um Ihre django-Webanwendung zu "bauen" und dann hinzuzufügen (mit dem 'ADD'-Schlüsselwort von dockerfile), um die statischen Dateien in das nginx-Bild zu schieben? –

+0

weil unsere qa/integration/production env so funktioniert. Das Nginx ist auf dem Host und nicht auf Docker ausgeführt. –

+0

Ich verstehe. Sie schauen sich also an, die Dateien eines Containers auf den Host zu laden, was ziemlich unkonventionell ist, weil die Leute das normalerweise umgekehrt tun. Was ist also der Zweck, einen Container zu haben, in dem Sie nur an seinen Dateien interessiert sind? Warum nicht einfach symbolisch das statische Dateiverzeichnis mit dem Verzeichnis verknüpfen, welches 'ngix' seine Dateien bereitstellt. –

Antwort

1

Volumes werden in Docker als Mounts behandelt, was bedeutet, dass das Host-Verzeichnis immer über das Verzeichnis des Containers gemountet wird. Mit anderen Worten, das, was Sie versuchen, ist derzeit mit Docker-Volumes nicht möglich.

Sehen Sie diese Github Thema für eine Diskussion zu diesem Thema: https://github.com/docker/docker/issues/4361

Eine mögliche Behelfslösung ein Docker Volumen in ein leeres Verzeichnis in Ihrem Container zu haben wäre, und dann in Ihrem Befehl Docker RUN (oder Start -up-Skript) kopieren Sie den statischen Inhalt in das leere Verzeichnis, das als Volume bereitgestellt ist.

+0

Meine Lösung war in Ihrer Nähe. Nachdem ich den Container gestartet und das Volume gemountet habe, habe ich einfach einen Collectstatic-Befehl ausgeführt, der das Volume mit den Dateien neu bevölkerte. –

0

Eine weitere schöne Lösung: 1. Installieren SSHD 2. SSHFS auf Host installieren 3. Montieren Ordner in Docker Behälter nach außen (Host) von SSHFS

Verwandte Themen