2016-08-14 53 views
2

我有一個容納django應用程序的碼頭容器。生成靜態文件並將其複製到靜態文件夾。
容器文件夾層次:將文件從碼頭容器公開到主機

- var 
    - django 
     - app 
     - static 

之前,我建立了碼頭工人的形象,我跑./manage.py collectstatic所以靜態文件在/var/django/static文件夾中。爲了公開應用程序並提供靜態文件,我在主機上有一個nginx。問題是,如果我在靜態文件夾和主機上的指定文件夾之間執行一個卷,那麼當我運行泊塢窗容器時,容器中的/var/django/static文件夾將被刪除(以及未被刪除但裝入)。有什麼辦法可以解決這個問題嗎?如在設置音量,但告訴碼頭採取當前文件?

+0

搬運工容器內安裝SSHFS 3.安裝文件夾以外(主機)爲什麼不建立一個'nginx'碼頭工人形象呢?那麼你在這裏要做的是做什麼來構建你的django web應用程序,然後添加(使用dockerfile的'ADD'關鍵字)將靜態文件推送到nginx圖像中? –

+0

,因爲那就是我們的qa /整合/生產env的工作原理。 nginx位於主機上,不在docker上運行。 –

+0

我明白了。所以你正在尋找將容器的文件安裝到主機上,這非常非常規,因爲人們通常會這樣做。那麼有一個容器,你只對它的文件感興趣的目的是什麼?爲什麼不把符號鏈接到靜態文件目錄到'ngix'將爲其文件提供服務的目錄。 –

回答

1

卷在Docker中被視爲掛載,這意味着主機目錄將永遠安裝在容器的目錄中。換句話說,你試圖做的事情對於Docker捲來說目前是不可能的。

看到這個Github的問題,對這個問題的討論:https://github.com/docker/docker/issues/4361

一個可能的解決辦法是有一個碼頭工人捲到一個空目錄在容器中,然後在你的泊塢運行命令(或啓動-up script),將靜態內容複製到作爲卷掛載的空目錄中。

+0

我的解決方案接近你的解決方案。在我啓動容器並安裝了音量後,我只是運行了anothe collectstatic命令,使用這些文件重新填充了音量。 –

0

另一種很好的解決方案: 1.安裝SSHD 2.主機通過SSHFS

相關問題