Docker

有什麼方法可以在 Dockerfile 中寫入 docker cli 上使用的 -v 命令?

  • August 14, 2018

比如說,我有一個 /var/lib/jenkins 的本地目錄結構,並且在生成的容器上我有相同的目錄結構。現在,我需要通過 Dockerfile 創建的 jenkins 使用者應該能夠訪問本地機器上存在的 /var/lib/jenkins/.m2/repository。我已經使用 Dockefile 中的 usermod 和 groupmod 將容器 jenkins 使用者標識映射到本地的 jenkins 使用者標識。但是,我需要本地機器上的 /var/lib/jenkins/.m2/repository 應該可以在容器內部對其上的所有程序進行訪問,以一種本地機器的儲存庫映射到容器路徑的方式

實際上,我需要在 dockerfile 中實現以下 cmd

docker run -it  --name my_container -v /var/lib/jenkins/.m2/repository:/var/lib/jenkins/.m2/repository my_image

任何有關這方面的指導都會有所幫助。

謝謝!

您不能在 Dockerfile 中定義卷源,因為映像可能在源會更改的不同環境中執行。因此,雖然您可以告訴 Docker 映像有一個卷/var/lib/jenkins/.m2/repository,但您不能告訴映像將該卷映射到主機目錄/var/lib/jenkins/.m2/repository。要指定執行時配置,您可以在 docker-compose.yml 文件中指定它,其卷部分如下:

version: '3'
services:
 svcname:
   image: my_image
   volumes:
   - /var/lib/jenkins/.m2/repository:/var/lib/jenkins/.m2/repository

我個人建議不要在 Dockerfile 中定義卷。如果您不在執行時指定卷源,它將生成匿名卷。如果您想RUN在定義卷後使用 Dockerfile 中的命令更改此目錄,這些更改將不會保存到您的映像中,並且會在該RUN行完成時失去。

引用自:https://serverfault.com/questions/926262