如何从docker容器rsync到我的主机

时间:2017-03-25 20:46:27

标签: linux docker kubernetes rsync minikube

我当前的开发环境允许在更改文件时自动重新加载代码(即nodemon / webpack)。但是,我正在设置kubernetesminikube)环境,以便我可以一次快速打开3-4个相关服务。

一切正常,但它目前没有进行自动代码重新加载。我尝试装入卷,但与dockervirtualbox处理文件的方式存在冲突,导致冲突导致file changes from the host not reflected in docker container。 (这不是我遇到的与此问题相关的第一个链接,它是我在另一天搜索时发现的第一个链接)...

无论如何,长话短说,ppl在开发中无法完成实时重载。我发现这个问题在整个互联网中很少发现问题。我说到目前为止我找到的最佳解决方案是This person used tar from the host来同步文件夹。

但是我想从容器中找到解决方案。原因是我想从容器中运行脚本,这样开发人员每次开始在特定仓库中开发时都不必在他的主机上运行一些脚本。

为了做到这一点,我需要从容器运行rsync到主机。而且我在弄清楚如何编写语法方面遇到了很多麻烦。

让我们假装我的应用程序分别存在于我的容器和主机中:

/workspace/app # location in container
/Users/terence/workspace/app  # location in host computer

如何从容器rsync到主机?我尝试使用172.17.0.17127.0.0.1无效。不完全确定是否有办法做到这一点?

我试过的例子:

rsync -av 172.17.0.17:Users/terence/workspace/app /workspace/app
rsync -av 127.0.0.1:Users/terence/workspace/app /workspace/app

1 个答案:

答案 0 :(得分:3)

如果您从主机(而不是容器内)运行rsync,则可以改为使用docker cp

例如,docker cp containerName:/workspace/app Users/terence/workspace/app

你可以澄清一下:
1.您是从主机还是从容器内部运行rsync? 如果它来自容器内部,它将很大程度上依赖于容器所连接的--network(即桥接或主机)以及已安装的容量(即,当您启动容器时)容器你使用-v标志?)

更新:要使rsync在容器内工作,您需要将主机的目录公开给容器。

在您考虑解决方案时,请牢记这一点:host dir as a data volume

  

注意:主机目录本质上是依赖于主机的。因此,您无法从Dockerfile安装主机目录,VOLUME指令不支持传递host-dir,因为构建的映像应该是可移植的。主机目录在所有潜在主机上都不可用。