2016-07-06 6 views
2

Я пытаюсь создать изображение докера, у меня есть файл докеров со всеми необходимыми командами. но на моих этапах сборки мне нужно скопировать один файл с удаленного хоста на изображение докеров. Но если я положу команду scp в файл dockerfile, мне придется предоставить пароль также в файл dockerfile, который мне не нужен.Как скопировать dir с удаленного хоста на докер image

У кого-то есть лучшее решение для этого. любое предложение было бы оценено.

ответ

3

Я бы сказал, что есть по крайней мере, варианты решения, которые:

Вариант 1: Если вы можете выполнить scp перед запуском docker build это может оказаться самым простым вариантом:

  1. Run scp -r somewhere:remote_dir ./local_dir
  2. Добавить COPY ./local_dir some_path в свой Dockerfile
  3. Run docker build

Вариант 2: Если вы должны выполнить scp во время сборки:

  1. Start некоторые ключ-значение магазина, такие как etcd перед сборкой
  2. Поместите правильный ключ SSH (он не может быть защищенным паролем) временно в хранилище значений ключа
  3. В пределах одной команды RUN (чтобы не оставлять секреты внутри изображения):
    • извлекает ключ SSH из хранилища значений ключа;
    • положите его в ~/.ssh/id_rsa или запустите ssh-agent и добавьте его;
    • получить каталог с scp
    • удалить SSH ключ
  4. Извлеките ключ из хранилища ключ-значение

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

+1

Я добавлю вариант №3. Тар/gzip их и сделать их доступными через HTTP. ADD может принимать удаленное назначение и автоматически распаковывать. – user2105103

+0

@ user2105103 Это действительно было бы проще, если вы не нуждаетесь в аутентификации, или если pass или hardcode - неопознанный URL. Также стоит отметить, что использование «ADD» не рекомендуется для аналогичных случаев использования: https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/#/add-or-copy – konradstrack

0

Вы можете скопировать каталог в (даже работает) контейнера на послеоперационное время сборки

  1. На удаленном компьютере: Копирование с удаленного хоста докер хоста с

    scp -r /your/dir/ <user-at-docker-host>@<docker-host>:/some/remote/directory

  2. На докерной машине: копия с хоста докера в контейнер для докеров

    docker cp /some/remote/directory <container-name>:/some/dir/within/docker/

Конечно, вы можете сделать шаг 1 и от вашей Docker машины, если вы предпочитаете, что просто адаптирование источник и мишень из Scp команды.