Docker将一个容器的目录挂载到另一个容器

Abh*_*nav 5 docker dockerfile docker-volume

我有一个容器 Container-A,其中包含目录 /opt/test/data,其中包含在构建映像期间创建的文件。现在我想将 /opt/test/data(container-a 目录) 共享给 Container-B,因为它需要在其生命周期中使用这些文件。我尝试过以下选项

docker run -it -d -v shareddata:/opt/test/data --name container-a test
Run Code Online (Sandbox Code Playgroud)

然后运行容器-B

docker run -it --volumes-from container-a --name container-b test-prod:latest
Run Code Online (Sandbox Code Playgroud)

数据已共享,但它在主机上创建一个命名卷共享数据,其中包含容器 a 的 /opt/test/data 目录的重复数据。

我尝试了另一种选择,即创建名称卷数据并将其安装在容器 a 中。然后我在已安装的卷上创建了 /opt/test/data 的符号链接,如下所示

ln -s /data/data /opt/test/data
Run Code Online (Sandbox Code Playgroud)

现在已将 /data 卷安装到容器 b,但符号链接在容器 b 上不起作用,因为它显示为损坏的链接。

有没有一种方法可以将容器 a 目录共享到容器 b 而不复制数据,因为我们希望将静态且相当大的数据(大约 2.5G)保留到一个图像,然后一个实例继续运行,该实例在多个容器之间共享测试产品图像?

Alf*_*nda -1

通常的方法是在启动容器时创建这些文件,而不是在构建时创建。您可以首先检查文件是否已创建,如果没有,则创建它们(或从 /tmp 或 wathever 移动它们)

例如,这是 mysql 的官方映像执行此操作的方式。

然后,您可以在该目录中挂载一个卷,并在容器之间共享它。