You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器运行后自动将目录复制到宿主机挂载卷

解决方案

方法1:容器启动后自动执行一次性复制

如果容器启动后会在固定目录(比如/app/generated)生成内容,你可以在启动容器时覆盖默认命令,先完成原启动流程,再把生成的内容复制到挂载的/test目录:

docker run -t -d -v ./test/:/test your-image sh -c "原容器启动命令 && cp -r /app/generated/* /test/"

举个实际例子,若镜像默认启动命令是/usr/bin/start-app,则命令为:

docker run -t -d -v ./test/:/test your-image sh -c "/usr/bin/start-app && cp -r /app/generated/* /test/"

方法2:实时同步容器内动态生成的内容

如果容器是持续生成内容(比如实时日志、增量输出文件),需要实时同步到宿主机,可以用inotifywait监听目录变化,自动触发复制:

前提:容器内需安装inotify-tools

若镜像未预装该工具,启动时先安装再执行同步逻辑:

docker run -t -d -v ./test/:/test your-image sh -c "
apt-get update && apt-get install -y inotify-tools && \
inotifywait -m /app/generated -e create -e modify -e move | while read dir action file; do
    cp -r /app/generated/* /test/
done & \
原容器启动命令
"

如果是Alpine镜像,将安装命令替换为apk add --no-cache inotify-tools即可。

方法3:解决挂载覆盖容器原有目录的问题

如果你的需求是把镜像自带的/test目录内容同步到宿主机挂载目录(因为挂载宿主机目录会覆盖容器内原有的/test),可以先复制容器内原/test内容到挂载目录,再启动服务:

docker run -t -d -v ./test/:/host-test your-image sh -c "
cp -r /test/* /host-test/ && \
原容器启动命令
"

这里将宿主机目录映射到容器内的/host-test,避免覆盖原/test目录,复制完成后再启动服务。


内容的提问来源于stack exchange,提问作者revan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 12:46:57