使一个容器中的目录可用于另一个容器,同时保留原始容器中的文件

时间:2018-12-13 15:09:09

标签: docker docker-compose docker-volume

假设您有一个包含Rails应用程序的图像,其中包含资产。而且您想从另一个运行Nginx的容器中为它们提供服务。

从我收集的数据来看,挂载卷会使目录的内容消失。因此,如果您将一个卷装入两个容器,例如,

volumes:
  assets:
services:
  app:
    volumes:
      assets:/app/public/assets
  nginx:
    volumes:
      assets:/assets

他们两个都将看到一个空文件夹。您可以手工将其填满。但是,如果要部署更新版本的Rails应用程序映像,则这两个将看不到更改。

我想念什么吗?有没有一种方法可以处理文件,而无需将它们代理到Rails应用或将它们从一个容器复制到另一个容器?<​​/ p>

UPD 第一个具有非空目录的容器将装入卷,该容器将确定其初始内容。

1 个答案:

答案 0 :(得分:1)

您可以在将Rails启动到Rails图像的DockerfileCMDENTRYPOINT)之前添加以下行:

rm -r /assets/*
cp -r /app/public/assets/* /assets

然后将这两种服务的卷装入/assets

这样,每次您的容器重新启动时(更改后在docker stack deploy上,该卷将被nginx容器可见的新资产重新填充。