Назад | Перейти на главную страницу

Как разделить объем с файлами кода между двумя контейнерами в одном модуле?

Я создал кластер GKE, и внутри него я создал один модуль с двумя конатинерами с этими настройками yaml.

apiVersion: v1
kind: Pod
metadata:
  name: django-nginx
spec:

  restartPolicy: Never

  volumes:
  - name: universal
    emptyDir: {}

  containers:

  - name: nginx
    image: nginx
    volumeMounts:
    - name: universal
      mountPath: /app_api

  - name: django
    image: django
    volumeMounts:
    - name: universal
      mountPath: /app_api

и я навязываю код приложения при создании изображения с помощью Dockerfile, часть которого здесь

FROM nginx
COPY ./app_api /app_api

но когда я подключаюсь к контейнеру и попадаю в этот каталог, он не показывает данных. Я хочу, чтобы этот код был скопирован на этот том. как это будет сделано ??

/app_api каталог пуст в обоих контейнерах, потому что вы установили над ним emptyDir (он не зря называется «пустым»).

У вас есть два способа «поделиться» файлами между контейнерами:

  • Добавьте файлы к обоим изображениям (nginx и django) на этапе сборки и не используйте том в pod. Технически у вас будет две разные копии данных, поэтому изменения в одном контейнере не будут применяться к другому.
  • Добавить контейнер инициализации который скопирует содержимое из изображения в том emptyDir при запуске модуля. Что-то вроде этого (обратите внимание, что он не будет копировать "точечные файлы" из корня /app_api/):
    initContainers:
    - name: init
      image: nginx
      command: ["cp" "-pr" "/app_api/*" "/universal/"]
      volumeMounts:
      - name: universal
        mountPath: /universal