如何在docker run命令中挂载容器目录?构建容器源码挂载问询
如何从另一个容器的源码目录运行一次性构建容器
我完全懂你的场景:你需要一个一次性构建容器,它的任务就是读取源码生成输出文件,完成后立刻退出,但麻烦的是源码不在Docker主机上,而是存放在另一个独立容器里。手动复制源码到主机确实能解决,但效率太低,下面给你几个更优雅的解决方案:
方案1:用Docker卷共享源码(最推荐)
Docker卷就是专门用来解决容器间数据共享的,步骤很清晰:
- 先创建一个专门用来存源码的卷:
docker volume create source-code-volume - 把源码容器里的源码同步到这个卷里(假设你的源码容器叫
source-container,源码路径是/app/src):docker run --rm --volumes-from source-container -v source-code-volume:/target busybox cp -r /app/src/* /target/ - 最后运行构建容器,同时挂载源码卷和主机的输出目录(假设构建容器是
build-container,容器内输出路径是/app/output,主机本地输出目录是./local-output):docker run --rm -v source-code-volume:/app/src -v ./local-output:/app/output build-container
这样构建容器能直接读取卷里的源码,生成的输出会自动同步到主机目录,完全不用手动复制源码到主机,后续如果源码更新了,重复第二步同步卷就行。
方案2:直接挂载运行中源码容器的目录
如果你的源码容器是处于运行状态的,还能更省事——直接让构建容器挂载它的目录:
docker run --rm --volumes-from source-container -v ./local-output:/app/output build-container
⚠️ 注意两点:
- 源码容器里的源码目录不能是容器的临时存储层(也就是不能是Dockerfile里
COPY进去的,除非你确定容器不会被删除),最好是挂载了卷或者绑定挂载的目录,否则容器停止后源码就没了。 - 构建容器里的构建命令要指向源码容器里的源码路径(比如
/app/src),确保能找到源码。
方案3:优化版手动复制(适合一次性操作)
如果只是偶尔做一次构建,不想折腾卷的话,可以优化手动复制的流程:
- 先把源码从源码容器复制到主机临时目录:
docker cp source-container:/app/src ./temp-source - 运行构建容器挂载临时源码目录和主机输出目录:
docker run --rm -v ./temp-source:/app/src -v ./local-output:/app/output build-container - 构建完成后删掉临时目录就行:
rm -rf ./temp-source
这个方法简单直接,但频繁操作的话还是卷共享更高效。
内容的提问来源于stack exchange,提问作者thurt
相关产品推荐
相关产品推荐

