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

Make a directory from one container available to another one while keeping files from the original one

假设您有一个包含资产的 Rails 应用程序图像。并且您想从另一个容器 运行 Nginx.

为它们提供服务

据我所知,安装卷会使目录的内容消失。因此,如果您将一个卷装载到两个容器中,例如

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

他们都将看到一个空文件夹。你可以很好地用手填满它。但是,如果您要部署更新版本的 Rails 应用映像,那两个将看不到更改。

我错过了什么吗?有没有一种方法可以在不将文件代理到 Rails 应用程序或将它们从一个容器复制到另一个容器的情况下处理文件?

UPD 挂载卷的第一个具有非空目录的容器确定其初始内容。

您可以在开始 Rails 之前添加以下行到您的 Rails 图像的 DockerfileCMDENTRYPOINT):

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

并将两个服务的卷装入 /assets

这样每次您的容器重新启动时(在 docker stack deploy 发生更改时),卷都会重新填充 nginx 容器可见的新资产。