如何将可执行文件从一个Docker容器拷贝到另一容器并运行
容器间传输可执行文件并运行的可行方案
方案1:宿主机中转传输(无需修改容器启动参数,适合临时场景)
- 先将源容器内的目标文件拷贝到宿主机临时路径:
docker cp <源容器ID/名称>:<容器内文件路径> <宿主机临时存储路径>
示例:docker cp app_source:/app/target/demo.jar ./temp_demo.jar - 再将宿主机存储的临时文件拷贝到目标容器:
docker cp <宿主机临时存储路径> <目标容器ID/名称>:<目标容器内存储路径>
示例:docker cp ./temp_demo.jar test:/demo.jar - 若需要从源容器侧触发目标容器内的文件运行操作,可在源容器启动时挂载宿主机Docker套接字:
启动源容器时添加参数-v /var/run/docker.sock:/var/run/docker.sock,源容器内安装Docker客户端后,即可直接执行拷贝、运行命令,调用示例:
# 源容器内执行拷贝 docker cp app_source:/app/target/demo.jar ./temp_demo.jar docker cp ./temp_demo.jar test:/demo.jar # 源容器内直接触发目标容器运行jar包 docker exec test java -jar /demo.jar
方案2:共享数据卷(适合频繁传输文件的场景,性能更高)
- 先创建Docker共享数据卷:
docker volume create shared_transfer_volume - 启动源容器和目标容器时,均挂载该共享卷:
源容器启动添加参数:-v shared_transfer_volume:/shared_dir
目标容器启动添加参数:-v shared_transfer_volume:/shared_dir - 源容器内直接将可执行文件移动到
/shared_dir目录下,目标容器可直接读取该目录下的文件,无需额外拷贝操作,直接运行即可。
该方案无需重复传输文件,适合多容器频繁共享资源的场景
方案3:容器网络直接传输(适合容器网络互通的场景)
若两个容器属于同一网络、网络互通,可直接用内置工具完成文件传输,无需经过宿主机:
- 目标容器内启动临时文件接收服务,示例用Python内置HTTP服务:
python3 -m http.server 9000 --directory /opt/target_dir - 源容器内将可执行文件上传到目标容器,或者直接从目标容器拉取文件,示例用curl拉取:
curl http://<目标容器IP>:9000/demo.jar -o /opt/demo.jar - 传输完成后直接执行启动命令即可。
注意:可执行文件传输完成后,如果出现权限不足的报错,可先执行
chmod +x <可执行文件路径>添加执行权限。
内容的提问来源于stack exchange,提问作者RDD
相关产品推荐
相关产品推荐

