2016-01-21 4 views
10

Я использую Docker на Mac OS X с докерной машиной (с загрузочной машиной по умолчанию), и я использую docker-compose для настройки моей среды разработки.Вводят SSH ключи хоста в Docker Machine с Docker Compose

Предположим, что один из контейнеров называется «stack». Теперь то, что я хочу сделать, это вызов:

docker-composer run stack ssh [email protected] 

Мой открытый ключ (который был добавлен stackoverflow.com и который будет использоваться для аутентификации меня) находится на хост-машине. Я хочу, чтобы этот ключ был доступен для контейнера Docker Machine, чтобы я смог пройти аутентификацию против stackoverflow, используя этот ключ из контейнера. Предпочтительно без физического копирования моего ключа на Docker Machine.

Есть ли способ сделать это? Кроме того, если мой ключ защищен паролем, есть ли способ разблокировать его один раз, поэтому после каждой инъекции мне не нужно вручную вводить пароль?

ответ

25

Вы можете добавить это к вашему Докер-compose.yml (если ваш пользователь внутри контейнера корень):

volumes: 
    - ~/.ssh:/root/.ssh 

Также вы можете проверить на more advanced solution with ssh agent (я не пробовал сам)

+6

Примечание это решение может потерпеть неудачу, если ваши ключи SSH принадлежат к пользователю на хост-машине –

+1

Не работает в Mac OSX 10.12.1, docker-compose 1.8 –

+4

Пока вы можете это сделать во время выполнения, вы не сможете получить доступ к тому во время сборки. –

2

Вы можете переслать SSH-агент:

something: 
    container_name: something 
    volumes: 
     - $SSH_AUTH_SOCK:/ssh-agent # Forward local machine SSH key to docker 
    environment: 
     SSH_AUTH_SOCK: /ssh-agent 
+1

Вы уже дали этот ответ здесь http://stackoverflow.com/a/36648428/228370 И одно примечание: это не работает для mac as @ joe-saw отметил, что сокеты домена unix не проксированы – 23tux

1

Docker имеет функцию, называемую секретами, что может быть полезно здесь. Для того, чтобы использовать его можно добавить следующий код docker-compose.yml:

--- 
version: '3.1' # Note the minimum file version for this feature to work 
services: 
    stack: 
    ... 
    secrets: 
     - host_ssh_key 

secrets: 
    host_ssh_key: 
    file: ~/.ssh/id_rsa 

Затем новый секретный файл может быть доступна в Dockerfile так:

RUN mkdir ~/.ssh && ln -s /run/secrets/host_ssh_key ~/.ssh/id_rsa 

Секретные файлы не будут скопированы в контейнер:

Когда вы предоставляете доступ к секретной информации вновь созданному или запущенному сервису, дешифрованный секрет монтируется в контейнер в файловой системе в памяти

Для получения более подробной информации, пожалуйста, обращайтесь:

+0

Hi astyagun: Я согласен с тем, что использование функции Secrets - хороший способ приблизиться к этому, но чтобы лучше ответить на ваш вопрос, было бы полезно включить основные части ответ здесь и укажите ссылки для справки. –

+0

Спасибо. добавленные примеры –

Смежные вопросы