将文件从容器 fs 复制到兄弟容器
Copy files from container fs to sibling container
假设我 运行 在一个容器中,容器的开头是:
docker run -v /var/run/docker.sock:/var/run/docker.sock foo
然后我从上面的容器中启动另一个容器:
docker run -v /var/run/docker.sock:/var/run/docker.sock bar
我的问题是 - 第二个命令的 /var/run/docker.sock 是否指向与第一个命令相同的 /var/run/docker.sock?
容器应该是 siblings,所以我的第二个问题是 - 如何使用 "outer" 容器将文件放入 "inner" 容器-v 选项?我想做的事:
docker run -v "/foo:/bar" -v /var/run/docker.sock:/var/run/docker.sock bar
当一个人将 docker 套接字安装到容器中时,s/he 给予容器对 docker 运行 实例的控制权主持人.
您可以认为这类似于为多个容器提供网站的 URL。类似容器所做的任何事情都会影响类似网站,并且这些更改将对所有人可见。
具体而言,在此设置下,没有容器层次结构:只有多个容器控制同一个 docker 守护进程,否则这些容器可以通过主机上的 docker
命令控制。通过 docker 守护进程,每个容器都具有在主机上执行几乎所有操作的同等能力,而且容器默认提供的隔离功能几乎完全被颠覆。
因此,docker 中的 docker 具有一些固有的安全隐患,但可以在互联网上的其他地方找到更多相关信息。
要回答你的第二个问题,在容器之间复制文件涉及 运行 发出源容器中文件内容的命令,并将其通过管道传输到写入目标中目标文件的命令容器。例如:
docker exec container1 cat /source/file | docker exec -i container2 bash -c "cat > /dest/file"
复制多个文件可能涉及在源中创建一个 tarball 并在另一个中展开它:
docker exec container1 tar -C /source -c dir| docker exec -i container2 tar -C /dest -x
为方便起见,对于容器中 shell 或 tar
不可用的情况,docker cp
可用于将文件从容器复制到主机。通过将文件从源容器复制到主机,然后再复制到目标容器,您可以获得相同的解决方案,但需要一些临时存储空间。例如:
docker cp container1:/source/file file
docker cp file container2:/dest/file
不过,你说到点子上了。另一种方法是将主机中的目录挂载到两个容器中,并通过该目录进行通信。例如:
mkdir shared
docker run -d --name=container1 -v $PWD/shared:/mnt/share image command
docker run -d --name=container2 -v $PWD/shared:/mnt/share image command
尽管有错别字,上面的示例将导致两个容器可用。这两个容器中的进程可以通过 /mnt/share
共享文件,并将由主机上的 shared/
目录支持。
假设我 运行 在一个容器中,容器的开头是:
docker run -v /var/run/docker.sock:/var/run/docker.sock foo
然后我从上面的容器中启动另一个容器:
docker run -v /var/run/docker.sock:/var/run/docker.sock bar
我的问题是 - 第二个命令的 /var/run/docker.sock 是否指向与第一个命令相同的 /var/run/docker.sock?
容器应该是 siblings,所以我的第二个问题是 - 如何使用 "outer" 容器将文件放入 "inner" 容器-v 选项?我想做的事:
docker run -v "/foo:/bar" -v /var/run/docker.sock:/var/run/docker.sock bar
当一个人将 docker 套接字安装到容器中时,s/he 给予容器对 docker 运行 实例的控制权主持人.
您可以认为这类似于为多个容器提供网站的 URL。类似容器所做的任何事情都会影响类似网站,并且这些更改将对所有人可见。
具体而言,在此设置下,没有容器层次结构:只有多个容器控制同一个 docker 守护进程,否则这些容器可以通过主机上的 docker
命令控制。通过 docker 守护进程,每个容器都具有在主机上执行几乎所有操作的同等能力,而且容器默认提供的隔离功能几乎完全被颠覆。
因此,docker 中的 docker 具有一些固有的安全隐患,但可以在互联网上的其他地方找到更多相关信息。
要回答你的第二个问题,在容器之间复制文件涉及 运行 发出源容器中文件内容的命令,并将其通过管道传输到写入目标中目标文件的命令容器。例如:
docker exec container1 cat /source/file | docker exec -i container2 bash -c "cat > /dest/file"
复制多个文件可能涉及在源中创建一个 tarball 并在另一个中展开它:
docker exec container1 tar -C /source -c dir| docker exec -i container2 tar -C /dest -x
为方便起见,对于容器中 shell 或 tar
不可用的情况,docker cp
可用于将文件从容器复制到主机。通过将文件从源容器复制到主机,然后再复制到目标容器,您可以获得相同的解决方案,但需要一些临时存储空间。例如:
docker cp container1:/source/file file
docker cp file container2:/dest/file
不过,你说到点子上了。另一种方法是将主机中的目录挂载到两个容器中,并通过该目录进行通信。例如:
mkdir shared
docker run -d --name=container1 -v $PWD/shared:/mnt/share image command
docker run -d --name=container2 -v $PWD/shared:/mnt/share image command
尽管有错别字,上面的示例将导致两个容器可用。这两个容器中的进程可以通过 /mnt/share
共享文件,并将由主机上的 shared/
目录支持。