Отправка ключа SSH в докер с помощью переменных env не работает - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь установить некоторые приватные гемы (bitbucket git repo) в моем файле Docker, и SSH-доступ запрещен

То, что я сделал, было:

  1. установить мой закрытый ключ на переменную "ssh_key"
  2. установить переменную env "ssh_config" как "IdentityFile /.ssh/id_rsa Host User"
  3. В docker-compose:
    args:
            ssh_key: ${ssh_key}
            ssh_config: ${ssh_config}

  1. В Dockerfile:
    ARG ssh_key
    ARG ssh_config
    RUN mkdir /.sshRUN echo "${ssh_key}" > /.ssh/id_rsa
    RUN echo "${ssh_config}" > /etc/ssh/ssh_config
    RUN chmod 600 /.ssh/id_rsa
    bundle install

Я получаю ошибку

fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Но когда я комментирую приватные гемы и собираю образ, ssh в контейнер, удаляю файл id_rsa и вручную вставляю приватный ключ хоста с помощью текстового редактора и запускаю chmod 600 (или просто монтирую мой хост ~ / .ssh dir), то могу установить приватные гемы без ошибок.

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

Спасибо

1 Ответ

1 голос
/ 06 мая 2019

Если вы запустите bundle package на своем хосте перед запуском docker build, у вас будет локальная копия всех файлов gem, необходимых для установки вашего приложения. Тогда опция bundle install --local будет использовать локальный каталог вместо попытки извлечения файлов удаленно. Ваш Dockerfile может выглядеть частично

COPY Gemfile Gemfile.lock .
COPY vendor/cache vendor/cache
RUN bundle install --frozen --local --system

Это позволяет избежать довольно опасного танца с ssh-ключами, которые вы пытаетесь: любой, у кого есть изображение, может посмотреть его docker history или просто запустить контейнер и легко получить свой закрытый ключ ssh.

...