Docker
有什麼方法可以在 Dockerfile 中寫入 docker cli 上使用的 -v 命令?
比如說,我有一個 /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
行完成時失去。