2016-07-26 34 views
1

是否可以從Dockerfile裝入卷?如果不是什麼是完成這件事的最好方法?我可以從Dockerfile裝入卷嗎?

我知道你可以在命令提示符下使用普通的Docker命令來做到這一點,但是有沒有更好的方法來完成這個任務?

+0

您可以從Dockerfile裝入卷,但您無法指定位置 - 因此根據您的需要它可能有用也可能不會有幫助。原因是構建應該獨立於主機。如上所述,您可以在構建期間複製文件,但如果您想讀/寫,您可能需要不同的解決方案。你可以使用API​​來獲取動態創建的卷的位置,但我不確定哪個用例更好,然後在'run'上指定它。如果你確實有一些獨特的用例,更多的細節會有所幫助。 – ldg

+0

似乎[搖桿](https://github.com/grammarly/rocker)在這種情況下可能會有所幫助。 – Opal

回答

1

不幸的是它是而不是可能在圖像構建期間這樣做。

我覺得原因可能是可移植性?我不太確定 - 如果有人能夠進一步解釋這個問題,那將會很好。

但我的猜測是,如果Docker允許用戶在構建時加載卷,那麼Doc​​ker將不得不預測並處理不同類型的文件系統,例如Windows和Unix。另外如果它應該用於安裝的目錄路徑在另一個主機上不存在?

反正我不太清楚你的使用情況是什麼,但你應該能夠在生成過程中使用ADDCOPY命令從您的主機的文件系統文件移動到圖像,並使用移動的文件爲其他目的如安裝等

參見:
https://docs.docker.com/engine/reference/builder/#/add

問:那麼,什麼是最好的方法?
- 答:我認爲沒有標準的方法來安裝音量。我通常在docker-compose文件中定義我的安裝。

參見:
https://docs.docker.com/compose/compose-file/#/volumes-volume-driver

+0

謝謝你,再加上我還有一個問題,我如何掛載當前文件夾作爲卷,例如我想要做這樣的事情 docker run -i -t -v :/ usr/TmpVolume ubuntu/bin/bash – user3547774

+0

@ user3547774我可能會嘗試使用'\'pwd \''命令運行表達式來獲取當前的工作目錄。例如:'docker run -i -t -v \'pwd \':/ usr/TmpVolume ubuntu/bin/bash'很高興幫助,讓我知道如果這對你有用 –

+0

我試過了,沒有用。無論如何,'pwd'做什麼?它在容器內部創建了一個卷,但主機系統上可用的內容不見了。 – user3547774

1

在一個Dockerfile的情況下,你有有限的訪問主機資源,的實際構建容器的圖像所需的內容的程度。爲了說明,您應該能夠安裝主卷,啓動容器或訪問其資源,這可能等同於可以在當前環境中爲您構建的映像。

如果您確實需要在構建期間將主機資源掛載爲卷,則可能需要查看Packr。但是,如果您希望容器在容器啓動時可用,則通常可以使用docker run --name=Foo $ARGS

相關問題