在 docker 容器内将文件从 docker 移动到本地

Moving file from docker to local while inside docker container

我有一个 python 程序可以将输出文件存储在本地。现在我的代码在 docker 容器内 运行 我想将生成的输出文件(如 output.txt)移动到我的本地(在 docker 容器外)

我知道有一个命令可以将文件从 docker 传输到本地:

docker cp <containerId>:/file/path/within/container /host/path/target

#I tried like this inside docker container but it didn't work
os.system(sudo docker cp <containerId>:/file/path/within/container /host/path/target) 

但是由于我的程序在 docker 内部执行,所以这不起作用,我想将文件作为代码推送到本地 运行s.

如果您有任何想法,请分享。

容器内的代码无法直接操作容器外的任何东西。容器的全部目的是将其与主机系统隔离开来;打破这个障碍会带来严重的安全后果,基本上会使容器变得毫无意义。

可以做的是使用-v(或运行docker cp从容器内的主机挂载一个目录一旦您确信它已成功创建文件,容器就会成功;但是您将如何向外界传达这一事实?)

docker run --volume=`pwd`:/app myimage

你可以

cp myfile /app

容器内;这将从 Docker.

中创建 ./myfile

把容器当成一个Linux系统,你的问题会被认为是:如何在两个主机之间传输文件。

也许还有其他一些无需重新运行容器的方法:

  • scp(推荐)在需要的时候搭配其他选项或工具,比如expect可以处理sshaccept指纹或输入密码,假设172.17.0.1是主机的docker接口和ssh_port默认为22,ssh进度监听docker接口如0.0.0.0:22.
os.system(sudo scp /file/path/within/container user@172.17.0.1:/host/path/target)
  • 其他客户端-服务器模型,例如rsync(客户端和服务器)、python SimpleHTTPServer(服务器)和curl | python request | wget(客户端)等等。但是不推荐这些,因为服务端和客户端都需要部署。