如何在Dockerfile中将文件放在共享卷上?

End*_*der 2 docker dockerfile

我有一个Dockerfile,它构建了一个图像,为我提供了一个复杂的工具链环境,可以在主机文件系统的已装载卷上编译项目.另一个原因是我在图像上没有很多空间.

Dockerfile在OS映像中构建我的工具链,然后通过下载要放置在主机共享卷上的包来准备源.通常从那里我然后登录图像并执行命令来构建.这就是问题所在.我可以在Dockerfile中下载源代码,但是如何将它下载到共享卷.

基本上我有......

ADD http://.../file mydir
VOLUME /home/me/mydir
Run Code Online (Sandbox Code Playgroud)

但当然,我得到错误'无法在现有文件上安装卷..."

我错了吗?

lar*_*sks 5

你错了,但你已经怀疑了.

如果您希望源文件驻留在主机文件系统上,VOLUME请删除Dockerfile 中的指令,并且不要尝试在构建时下载源文件.这是您希望在运行时执行的操作.您可能希望使用一对脚本配置图像:

  • 比如,将文件下载到特定位置的文件/build.

  • 另一个实际运行构建过程.

有了这些,您可以先将源文件下载到主机文件系统上的某个位置,如下所示:

docker run -v /path/on/my/host:/build myimage fetch-sources
Run Code Online (Sandbox Code Playgroud)

然后你可以通过运行来构建它们:

docker run -v /path/on/my/host:/build myimage build-sources
Run Code Online (Sandbox Code Playgroud)

有了这个型号:

  • 你正试图在图像构建过程中弄乱卷.这几乎不是您想要的,因为存储在卷中的数据明确地从图像中排除,并且构建过程不允许您方便地在容器内安装主机目录.

  • 您可以将文件下载到主机上的永久位置,您可以在其中进行编辑或重新构建等等.

  • 您可以多次运行构建过程,而无需每次都重新下载源文件.

我认为这会做你想要的,但如果它不符合你的需要,或者有些事情不清楚,请告诉我.