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

时间:2018-01-10 11:10:25

标签: docker dockerfile docker-volume

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

docker run -it -d -v shareddata:/opt/test/data --name container-a test

然后将container-B作为

运行
docker run -it --volumes-from container-a --name container-b test-prod:latest

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

我尝试了另一种创建名称卷数据并将其安装在container-a中的选项。然后我在挂载的卷上创建了一个符号/ opt / test / data的符号链接,如下所示

ln -s /data/data /opt/test/data

现在将/ data卷挂载到container-b,但符号链接在container-b上不起作用,因为它将其显示为断开的链接。

有没有办法可以将容器 - 一个目录分享到容器-b而不复制数据,因为我们希望保留静态的数据,并且对于一个映像大约2.5G,然后实例继续运行,这是共享的多个容器的test-prod图像?

3 个答案:

答案 0 :(得分:0)

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

例如,这是mysql官方映像的方式。

然后,您可以在该目录中安装卷,并在容器之间共享。

答案 1 :(得分:0)

试试这个,您可以直接从一个容器共享数据到另一个容器,而无需使用主机目录,

$ docker run -v /opt/test/data --name container-a test
$ docker run --volumes-from container-a test-prod:latest

希望,这可以解决您的问题。由于数据量较大,而且您在多个容器之间共享,可能需要更好的存储编排解决方案,如rexray,您可以在n个容器之间轻松共享。

答案 2 :(得分:0)

如果文件已经存在于您作为卷安装的容器目录中,则目录的内容将被复制到卷中。请参阅Populate a volume using a container

没有办法将容器的目录作为卷安装而不进行复制。另一种方法是不将数据存储在容器中,而是在主机上创建卷并用数据填充它。这样,数据只会存在一次。

相关问题