我的笔记本电脑(localhost)上有一个大文件。我想将此文件复制到位于远程服务器上的Docker容器中。我知道如何分两步完成此操作,即首先将文件复制到远程服务器,然后将文件从远程服务器复制到Docker容器中。但是,出于明显的原因,我希望避免这种情况。
一个类似的问题,其中有一个复杂的答案是涵盖在这里:Copy file from remote docker container
但是在这个问题中,方向相反,文件从远程容器复制到本地主机。
其他要求:有没有可能这个上传可以分段完成,或者在网络故障的情况下,我可以从它停止的地方恢复上传,而不必再次上传整个文件?我问,因为文件是相当大,~ 13 GB.
3条答案
按热度按时间kyxcudwk1#
在https://docs.docker.com/engine/reference/commandline/cp/#corner-cases和https://www.cyberciti.biz/faq/howto-use-tar-command-through-network-over-ssh-session/中,您只需执行以下操作:
或
或者未经测试,不知道这是否可行:
j9per5c42#
如果您运行的是 *nix服务器和带有ssh服务器的Docker,这将有效。
您可以按照以下步骤在远程服务器上创建本地通道:
第一个命令将创建一个可以使用
file host_to_docker
检查的管道。第二个是
netcat
,它接受一个tcp连接并将其转发给另一个netcat示例,接收底层ssh消息并将其转发给运行在docker上的ssh服务器,然后将其响应写入我们创建的管道。最后一步是:
iszxjhcz3#
您可以使用
DOCKER_HOST
环境变量和rsync
来存档您的目标。首先,设置
DOCKER_HOST
,这将使Docker客户机(即docker
CLI实用程序)通过SSH连接到远程服务器的Docker守护进程,这可能需要为目标服务器创建一个ssh-config条目。接下来,您可以结合使用
docker exec
和rsync
将数据复制到目标容器中,这需要您通过docker ps
等获取容器ID,注意,rsync
必须安装在容器中。由于使用了
rsync
,这还允许您在以后的某个时间点恢复(如果使用了适当的标志)上载。