2017-05-05 99 views
4

我有一個Dockerfile它將一些文件複製到容器中,然後創建一個VOLUME。Docker添加文件到VOLUME

... 
ADD src/ /var/www/html/ 
VOLUME /var/www/html/files 
... 

src文件夾是一個文件夾,並在該文件的文件夾是一些文件,我需要複製到卷首次容器被啓動。

我以爲第一次創建容器時,它使用了卷中指定的原始目錄的內容,但事實並非如此。

那麼我怎樣才能獲得文件到這個文件夾? 我是否需要創建一個額外的文件夾並將其與一個腳本複製(我不希望)?不管你把你的Dockerfile

+0

它應該可以工作,並且有200%的可靠性我已經測試過了。如果在docker-run或docker-compose中使用'-v/path/to/some/directory:/ var/www/...',那麼它將無法正常工作。 –

回答

4

構建時只是評估(而不是當你創建新容器)。

如果你想使文件在容器中使用的主機使用data volume

docker run -v /host_dir:/container_dir ... 

如果你只是想從主機的文件複製到一個容器作爲一次性操作即可使用:

docker cp /host_dir mycontainer:/container_dir 
+0

我想在編譯時添加這些文件,這樣我在文件夾中就有了初始文件。但是我想通過數據卷讓我的主機可以使用這個文件夾。所以最初的文件應該放在數據卷中。我可以通過容器中的啓動腳本複製文件,但我希望有一個更優雅的解決方案。如果沒有,我會通過腳本來完成 –

1

問題出在您的ADD語句。你也可能不知道如何訪問卷。比較下面的演示你的努力:

FROM alpine #, or your favorite tiny image 
ADD src/files /var/www/html/files 
VOLUME /var/www/html/files 

建立所謂的 'dataimg' 的圖像:

docker build -t dataimg . 

使用dataimg圖像創建一個名爲 'DATACON' 數據容器:

docker run --name datacon dataimg /bin/cat 

在您的nginx容器中安裝datacon的卷:

docker run --volumes-from datacon nginx ls -la /var/www/html/files 

你會看到/ var/www/html /文件的列表反映了src /文件的內容