3

假设我在一个容器中运行,该容器开始于:

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 ?

容器应该是兄弟姐妹,所以我的第二个问题是 - 如何使用 -v 选项将文件从“外部”容器获取到容器的“内部”?我想做:

docker run -v "/foo:/bar" -v /var/run/docker.sock:/var/run/docker.sock bar
4

1 回答 1

0

当一个人将 docker 套接字安装到容器中时,他/她正在让容器控制在主机上运行的 docker 实例。

您可以认为这类似于为多个容器提供网站的 URL。类似容器所做的任何事情都会影响类似网站,并且这些更改对所有人都是可见的。

具体来说,在这种设置下,没有容器的层次结构:只有多个容器控制同一个 docker 守护进程,否则这些 docker 守护进程可以通过docker主机上的命令进行控制。每个容器都可以通过 docker 守护进程在主机上做几乎任何事情,并且容器默认提供的隔离几乎将被完全颠覆。

出于这个原因,docker 中的 docker具有一些固有的安全隐患,但更多内容可以在 Internet 上的其他地方找到。

要回答您的第二个问题,在容器之间复制文件涉及运行一个命令,该命令发出源容器中文件的内容,并将其通过管道传输到写入目标容器中目标文件的命令。例如:

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

为方便起见,对于外壳或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/sharewith 共享文件,这将由shared/主机上的目录支持。

于 2019-05-10T21:28:35.577 回答