Я ищу шаблон, который позволяет обмениваться томами между двумя контейнерами, работающими на одном контейнере в Кубернете.
Мой вариант использования:
У меня есть приложение Ruby on Rails, запущенное внутри контейнера докеров.
Изображение docker содержит статические ресурсы в каталоге /app/<app-name>/public
, и мне нужно получить доступ к этим ресурсам из контейнера nginx, работающего рядом с тем же пакетом.
В docker 'vanilla' я бы использовал флаг --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
на node существует, он пуст -
/app/<app-name>/public
внутри контейнера приложения также пуст
В качестве обходного пути я попытаюсь заполнить общий каталог, когда контейнер приложения вставлен (просто cp /app/<app-name>/public/*
в общий каталог), но мне действительно не нравится эта идея.
Вопрос: как имитировать --volumes-from
в Kubernetes, или если нет прямого аналога, как я могу обмениваться файлами из одного контейнера на другой, работающий в одном и том же контейнере?
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"}