如何使用docker cp从主机到docker容器的rsync

我正在尝试运行以下内容:

  1. 在后台启动一个容器

docker run -dit -p 8090:80 --name container repository:dockerfile bash

  1. 我想从/test排除子目录/data

docker cp /Users/$USER/test container:/test

  1. 我想使用rsync这个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?

首先将主机目录映射到容器中:

 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/ 

当您运行docker exec rsync [...]时,您可以在容器中执行rsync命令。 path/Users/$USER/test/对应于您主机系统上的目录,所以rsync很难在您的容器中find它。

基本上有两种使用rsync将文件传输到容器的方法:

  1. 您可以在主机系统上安装ssh服务器,并使用rsync从您的容器内连接到外部的主机系统。 如果你的主机上有一个正在运行的ssh服务器,并且你可以在主机的名字下访问host

     docker exec rsync -avP --exclude /Users/$USER/test/data host:/Users/$USER/test /test 
  2. 您可以在容器中安装一个ssh服务器,并在主机系统上使用rsync 从外部连接到容器。 我假设你的容器可以在名称container下访问,那么你可以做

     rsync avP --exclude /Users/$USER/test/data /Users/$USER/test container:/test 

    在这种情况下,您必须确保docker守护进程发布ssh端口(缺省值为22)。