Невозможно записать файл из Docker, запущенного в модуле kubernetes - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть образ докера, который использует том для записи файлов:

docker run --rm -v /home/dir:/out/ image:cli args

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

Я не понимаю.

Ошибки выброса контейнера, если он не находит том, например, если я запускаю его без параметра -v, он выбрасывает:

Unhandled Exception: System.IO.DirectoryNotFoundException: Could not find a part of the path '/out/file.txt'.

Но у меня нет ошибок из контейнера. Он заканчивается, как будто он записал файлы, но файлы не существуют.

Я довольно новичок в Кубернетесе, но это сводит меня с ума.

kubernetes предотвращает запись файлов? или я что-то упускаю очевидное?

Весь контекст Kubernetes управляется GCP composer-airflow, если это помогает ...

docker -v: Docker version 17.03.2-ce, build f5ec1e2

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

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

Прежде всего, нет необходимости запускать команду docker run внутристручок :)Файл spec (yaml) должен быть написан для модуля, и kubernetes запустит контейнер в модуле, используя для вас докер.В идеале вам не нужно запускать команды docker при использовании kubernetes (если только вы не отлаживаете проблемы, связанные с докером).

Эта ссылка содержит полезные kubectl команды для пользователей докера.

Если вы привыкли к docker-compose, см. Kompose, чтобы перейти от docker-compose к кубернетам:

Некоторые опции для монтирования каталога на хосте как тома внутри контейнера в kubernetes:

0 голосов
/ 16 ноября 2018

Если вы хотите иметь такое поведение в Kubernetes, вы можете использовать том hostPath.

По сути, вы указываете его в спецификации модуля, а затем том монтируется на узле.где работает ваш модуль, а затем файл должен быть там, в узле после выхода из модуля.

apiVersion: v1
kind: Pod
metadata:
  name: test-pd
spec:
  containers:
  - image: image:cli
    name: test-container
    volumeMounts:
    - mountPath: /home/dir
      name: test-volume
  volumes:
  - name: test-volume
    hostPath:
      path: /out
      type: Directory
...