gpt4 book ai didi

docker - 将文件从容器 fs 复制到同级容器

转载 作者:行者123 更新时间:2023-12-02 09:56:14 25 4
gpt4 key购买 nike

假设我正在一个容器中运行,该容器的启动方式为:

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

最佳答案

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

您可以将此视为类似于为多个容器提供网站的 URL。无论类似容器做什么都会影响类似网站,并且这些更改将对所有人可见。

具体而言,在此设置下,不存在容器层次结构:只有多个容器控制同一个 docker 守护进程,而这些守护进程本来可以通过主机上的 docker 命令进行控制。每个容器都具有相同的能力,可以通过 docker 守护进程在主机上执行几乎所有操作,并且容器默认提供的隔离几乎完全被破坏。

因此,docker in 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 - 将文件从容器 fs 复制到同级容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56084822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com