我正在尝试运行以下内容:
docker run -dit -p 8090:80 --name container repository:dockerfile bash
/data
/test
醇>
docker cp /Users/$USER/test container:/test
docker exec rsync -avP --exclude /Users/$USER/test/data /Users/$USER/test/ container:/test/
我得到以下错误:
rsync: Failed to exec ssh: No such file or directory (2)
rsync error: error in IPC code (code 14) at pipe.c(85) [sender=3.1.0]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226)
[sender=3.1.0]
如何从主机到容器进行rsync?
答案 0 :(得分:4)
首先将主机目录映射到容器中:
docker run -v /Users/$USER/test:/temp-test -dit -p 8090:80 --name container repository:dockerfile bash
然后按如下方式使用rsync:
docker exec container rsync -avP --exclude /temp-test/data /temp-test/ /test/
答案 1 :(得分:2)
运行docker exec rsync [...]
时,在容器中执行rsync
命令。路径/Users/$USER/test/
对应于主机系统上的目录,因此rsync很难在容器中找到它。
基本上有两种方法可以使用rsync
将文件传输到容器中:
您可以在主机系统上安装ssh服务器,并使用rsync从容器内连接到主机系统从外部。如果您的主机上有正在运行的ssh服务器,并且主机可以在host
的名称下访问,则可以执行
docker exec rsync -avP --exclude /Users/$USER/test/data host:/Users/$USER/test /test
您可以在容器内安装ssh服务器,并在主机系统上使用rsync从外部连接到容器 。我假设您的容器可以在container
的名称下访问,然后您可以
rsync avP --exclude /Users/$USER/test/data /Users/$USER/test container:/test
在这种情况下,您必须确保docker守护程序发布ssh端口(默认为22)。
答案 2 :(得分:1)
rsync:无法执行ssh:没有这样的文件或目录(2)
是由于未为您的容器安装ssh而引起的。 您可以手动安装它,也可以将其添加到需求文件中以自动安装。
答案 3 :(得分:1)
这应该反映您在OP中尝试的命令...
rsync -avPe 'docker exec -i' --exclude /Users/$USER/test/data /Users/$USER/test/ container:/test/
它的工作原理类似于从容器中取出文件。
贷记https://github.com/moby/moby/issues/13660#issuecomment-165500701
答案 4 :(得分:0)
使用rsync将文件复制到Docker容器的方式
确保您的Docker容器已安装rsync,并定义以下别名:
position: absolute;
top: 0px;
left: -5000px;
现在,您可以将rsync与容器一起使用,就像它们是远程计算机一样:
alias drsync="rsync -e 'docker exec -i'"