当一个人将 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/share
with 共享文件,这将由shared/
主机上的目录支持。