С Docker как я могу связать mount, но также сохранить файлы-контейнеры? - PullRequest
1 голос
/ 09 января 2020

Я хочу использовать контейнер Docker для запуска утилиты (в частности, Terraform) с использованием локальных файлов. Чтобы быстро перебрать код (например, my_stuff.tf), я хочу привязать монтирование моего рабочего каталога. Однако я хочу считать некоторые вещи относительно стабильными и статичными, например плагины. По сути, я хочу, чтобы вещи обрабатывались тремя способами:

  1. .terraform/ - это стабильные вещи, которые должны существовать в контейнере, но не в моем каталоге хоста, но должны сохраняться даже после монтирования.
  2. my_stuff.tf существует как внутри контейнера (потому что init нуждается в нем), так и в директории хоста (потому что я хочу его отредактировать). Я хочу, чтобы моя версия каталога хоста переопределила версию контейнера.
  3. terraform.tfstate может не существовать ни в одном месте для начала, но генерируется во время работы. Я хочу, чтобы он сохранялся в моей директории хоста, как только он существует.

(и я думаю, 4-я категория, такая как README.md, где мне все равно, есть она или нет)

В моем случае TF ожидает, что оба .terraform/, где настроены плагины, и terraform.tfstate (один из выходов, которые я хочу перехватить с помощью моего bind-mount) будут находиться в одном каталоге, поэтому я не могу просто использовать разные каталоги для содержимого контейнера и подключенного содержимого.

# Dockerfile
FROM plugin_source AS plugins
FROM terraform_base
COPY --from=plugins terraform-provider-X /bin/
COPY my_stuff.tf /app/
WORKDIR /app
RUN /bin/terraform init

И моя команда запуска:

docker run --rm -i -t --mount source=$PWD,target=/app,type=bind my_terraform <some-tf-command>

Есть ли удобный способ заставить монтироваться bind так же, как именованные тома сделать при первой инициализации, как описано в https://docs.docker.com/storage/bind-mounts/#mount -into-a-непустой-каталог-на-контейнере ? В настоящее время кажется, что мне, возможно, придется написать небольшой сценарий точки входа, который вставит символические ссылки в мою рабочую директорию.

1 Ответ

1 голос
/ 09 января 2020

Раньше я делал это со старым контейнером Development Weblogi c, работающим на моем компьютере:

  1. Запустите образ
  2. docker cp каталогов, представляющих интерес для местных диск
  3. Stop и kill контейнер
  4. Запустите образ снова с сопоставлениями томов.

Это позволило мне получить fre sh начать с файлов из первичного контейнера и сохранить все изменения на сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...