我有一个Dockerfile,它构建了一个图像,为我提供了一个复杂的工具链环境,可以在主机文件系统的已装载卷上编译项目.另一个原因是我在图像上没有很多空间.
Dockerfile在OS映像中构建我的工具链,然后通过下载要放置在主机共享卷上的包来准备源.通常从那里我然后登录图像并执行命令来构建.这就是问题所在.我可以在Dockerfile中下载源代码,但是如何将它下载到共享卷.
基本上我有......
ADD http://.../file mydir
VOLUME /home/me/mydir
Run Code Online (Sandbox Code Playgroud)
但当然,我得到错误'无法在现有文件上安装卷..."
我错了吗?
你错了,但你已经怀疑了.
如果您希望源文件驻留在主机文件系统上,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)
有了这个型号:
你正试图在图像构建过程中弄乱卷.这几乎不是您想要的,因为存储在卷中的数据明确地从图像中排除,并且构建过程不允许您方便地在容器内安装主机目录.
您可以将文件下载到主机上的永久位置,您可以在其中进行编辑或重新构建等等.
您可以多次运行构建过程,而无需每次都重新下载源文件.
我认为这会做你想要的,但如果它不符合你的需要,或者有些事情不清楚,请告诉我.
| 归档时间: |
|
| 查看次数: |
358 次 |
| 最近记录: |