2014-10-10 88 views
4

目前有什麼方法可以在Docker構建過程中創建動態命名的卷嗎?我想看到的東西,如:共享容器容器的動態安裝點

sudo docker run -e MOUNT_POINT="/path/to/mount" module/sub-module 

然後在Dockerfile有類似:

ln -s /internal/path/to/storage $MOUNT_POINT 
VOLUME [$MOUNT_POINT] 

這將允許使用的非常有價值的volumes-from指令,但內置每個存儲容器可以有一個變體掛載點(並避免與想要使用多個數據卷容器的消費者發生衝突)。

任何想法將非常受歡迎。

+0

爲什麼符號鏈接? 如果它只是一個你想要的符號鏈接,那麼你可以用一個腳本來創建它,這個腳本可以作爲ENTRYPOINT或者CMD調用。 然後在啓動容器時動態創建VOLUME。 (創建符號鏈接的腳本,ofc也會啓動您的應用程序。) – frvi 2014-10-10 10:35:58

+0

它允許我將數據/內容存儲到一致的位置,然後在docker運行時動態地將它分配給主機需要的任何目錄 – ken 2014-10-10 12:54:42

+0

AKA ,符號鏈接*不是重要的部分,但它確保內容在內部安裝點(基於在docker運行時期間傳入的ENV變量動態分配)可用。 – ken 2014-10-10 13:03:18

回答

1

下面是如何使用卷。

  • 你一個容器,譬如說例如,您的應用程序容器一個數據庫。
  • 你有另一個容器,說你的容器容器實際上持有你的數據。
  • 使用卷參數-v開始卷容器。在這裏你可以動態地命名你的卷。
  • 使用卷容器啓動包含選項--volumes-from的應用程序容器。

請參閱該文檔的詳細信息https://docs.docker.com/userguide/dockervolumes/

+1

是的,我明白Zyndicate。問題是Dockerfile中的VOLUME聲明看起來是靜態的,限制了你想創建一個通用存儲容器的場景,這個容器可以用各種形式的內容實例化。這部分是好的,那麼當使用'-volumes-from'時,這個通用容器的所有衍生物都會在相同的共享點上共享。使用標準的'-v'共享,您可以直接指定主機:客戶端映射,但使用'--volumes-from'時,相同*爲*不*真。 – ken 2014-10-10 12:58:19

+0

@ken - 使用'-v'動態創建的卷確實跟隨'--volumes-from'。不確定我瞭解你的用例? – frvi 2014-10-10 13:04:27

+0

對於模式[數據容量容器](http://docs.docker.com/userguide/dockervolumes/#creating-and-mounting-a-data-volume-container)的情況,您可能希望有一個非具有持久存儲的運行容器。該存儲可以使用'--volumes-from'來掛載,但除非我誤認爲不是'-v'(僅用於安裝守護進程/正在運行的容器)。 – ken 2014-10-10 13:15:54