我正在寻找一种模式,允许在Kubernetes中运行的同一Pod上运行的两个容器之间共享卷。
我的用例是:
我有一个运行在docker容器内的Ruby on Rails应用程序。
docker镜像包含位于/app/<app-name>/public
目录中的静态资源,并且我需要从同一Pod中同时运行的nginx容器中访问这些资源。
在 'vanilla' docker 中,我会使用--volumes-from
标志来共享此目录:
docker run --name app -v /app/<app-dir>/public <app-image>
docker run --volumes-from app nginx
阅读此文档后:https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/volumes.md 我尝试了以下内容(仅列出相关条目):
spec:
containers:
- image: <app-image>
name: <app-name>
volumeMounts:
- mountPath: /app/<app-name>/public
name: assets
- image: nginx
name: nginx
volumeMounts:
- mountPath: /var/www/html
name: assets
readOnly: true
volumes:
- name: assets
hostPath:
path: /tmp/assets
但是:
- 尽管节点上的
/tmp/assets
存在,但是它是空的 - 应用程序容器内的
/app/<app-name>/public
也是空的
为了解决这个问题,我打算在应用程序容器启动时填充共享目录(简单地将/app/<app-name>/public/*
复制到共享目录中),但我真的不喜欢这个想法。
问题:如何在Kubernetes中模拟--volumes-from
,或者如果没有直接的对应项,如何在同一Pod中运行的一个容器向另一个容器共享文件?
apiVersion: v1beta3
Client Version: version.Info{Major:"0", Minor:"17", GitVersion:"v0.17.0", GitCommit:"82f8bdac06ddfacf493a9ed0fedc85f5ea62ebd5", GitTreeState:"clean"}
Server Version: version.Info{Major:"0", Minor:"17", GitVersion:"v0.17.0", GitCommit:"82f8bdac06ddfacf493a9ed0fedc85f5ea62ebd5", GitTreeState:"clean"}