如何使用docker cp从主机到docker容器的rsync
我正在尝试运行以下内容:
- 在后台启动一个容器
docker run -dit -p 8090:80 --name container repository:dockerfile bash
- 我想从
/test
排除子目录/data
docker cp /Users/$USER/test container:/test
- 我想使用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
将文件传输到容器的方法:
-
您可以在主机系统上安装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)。