使一个容器中的目录可供另一个容器使用,同时保留原始容器中的文件
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 图像的 Dockerfile
(CMD
或 ENTRYPOINT
):
rm -r /assets/*
cp -r /app/public/assets/* /assets
并将两个服务的卷装入 /assets
。
这样每次您的容器重新启动时(在 docker stack deploy
发生更改时),卷都会重新填充 nginx 容器可见的新资产。
假设您有一个包含资产的 Rails 应用程序图像。并且您想从另一个容器 运行 Nginx.
为它们提供服务据我所知,安装卷会使目录的内容消失。因此,如果您将一个卷装载到两个容器中,例如
volumes:
assets:
services:
app:
volumes:
assets:/app/public/assets
nginx:
volumes:
assets:/assets
他们都将看到一个空文件夹。你可以很好地用手填满它。但是,如果您要部署更新版本的 Rails 应用映像,那两个将看不到更改。
我错过了什么吗?有没有一种方法可以在不将文件代理到 Rails 应用程序或将它们从一个容器复制到另一个容器的情况下处理文件?
UPD 挂载卷的第一个具有非空目录的容器确定其初始内容。
您可以在开始 Rails 之前添加以下行到您的 Rails 图像的 Dockerfile
(CMD
或 ENTRYPOINT
):
rm -r /assets/*
cp -r /app/public/assets/* /assets
并将两个服务的卷装入 /assets
。
这样每次您的容器重新启动时(在 docker stack deploy
发生更改时),卷都会重新填充 nginx 容器可见的新资产。