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

时间:2017-08-16 22:23:29

标签: docker dockerfile

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

  1. 在后台启动容器
  2. docker run -dit -p 8090:80 --name container repository:dockerfile bash

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

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

      1. 我想过为此使用rsync docker exec rsync -avP --exclude /Users/$USER/test/data /Users/$USER/test/ container:/test/
      2. 我得到以下错误:

        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?

5 个答案:

答案 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将文件传输到容器中:

  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)。

答案 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'"