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

Bre*_*tis 5 docker dockerfile

我正在尝试执行以下操作:

  1. 在后台启动一个容器

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

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

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]
Run Code Online (Sandbox Code Playgroud)

如何从主机到容器进行同步?

Mil*_*hen 6

使用rsync将文件复制到Docker容器中的方法

确保您的 Docker 容器已安装 rsync,并定义此别名:

alias drsync="rsync -e 'docker exec -i'"
Run Code Online (Sandbox Code Playgroud)

现在,您可以将 rsync 与容器一起使用,就像它们是远程计算机一样:

drsync -av /source/ container:/destination/
Run Code Online (Sandbox Code Playgroud)

  • 这很棒!我会更加强调**“确保你的 Docker 容器安装了 rsync”**。否则,您将收到神秘错误:[“协议版本不匹配 - 您的 shell 干净吗?”](https://serverfault.com/a/803499/117206) (2认同)

Rob*_*ert 5

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

docker run -v /Users/$USER/test:/temp-test -dit -p 8090:80 --name container repository:dockerfile bash
Run Code Online (Sandbox Code Playgroud)

然后使用rsync,如下所示:

docker exec container rsync -avP --exclude /temp-test/data /temp-test/ /test/
Run Code Online (Sandbox Code Playgroud)