2016-01-21 6 views
10

Ich verwende Docker unter Mac OS X mit Docker Machine (mit dem Standardboot2docker-Rechner), und ich verwende docker-compose, um meine Entwicklungsumgebung einzurichten.SSH-Schlüssel des Hosts in Docker Machine einspeisen mit Docker Compose

Nehmen wir an, einer der Container heißt "stack". Nun, was ich tun möchte, ist Aufruf:

docker-composer run stack ssh [email protected] 

Meine öffentlichen Schlüssel (die stackoverflow.com hinzugefügt wurde und die verwendet wird, um mich zu authentifizieren) auf der Host-Maschine. Ich möchte, dass dieser Schlüssel für den Docker-Computer-Container verfügbar ist, damit ich mich anhand des Schlüssels innerhalb des Containers gegen stackoverflow authentifizieren kann. Vorzugsweise ohne meinen Schlüssel physisch an Docker Machine zu kopieren.

Gibt es eine Möglichkeit, dies zu tun? Wenn mein Schlüssel passwortgeschützt ist, gibt es dann eine Möglichkeit, ihn einmal zu entsperren, so dass ich nach jeder Injektion das Passwort nicht manuell eingeben muss?

Antwort

25

Sie können diese hinzufügen Ihre Docker-compose.yml (vorausgesetzt, Ihren Benutzer innerhalb des Behälters ist root):

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

Sie können auch für more advanced solution with ssh agent überprüfen (ich habe es selbst nicht ausprobiert)

+6

Hinweis diese Lösung fehlschlagen, wenn Ihre SSH-Schlüssel für einen Benutzer auf dem Host-Rechner gehören –

+1

nicht in Mac arbeiten OSX 10.12.1, docker-compose 1.8 –

+4

Während Sie dies zur Laufzeit ausführen können, können Sie während der Erstellung nicht auf das Volume zugreifen. –

2

Sie können SSH-Agent weiterleiten:

+1

Sie haben diese Antwort bereits hier gegeben http://stackoverflow.com/a/36648428/228370 Und eine Anmerkung: Dies funktioniert nicht für Mac als @ Joe-saw wies darauf hin, weil Unix-Domain-Sockets sind nicht Proxy – 23tux

1

Docker hat eine Funktion namens Geheimnisse, die hier hilfreich sein kann. Um es zu verwenden könnte man den folgenden Code docker-compose.yml hinzufügen:

--- 
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 

Dann wird der neue geheime Datei kann in Dockerfile wie folgt zugegriffen werden:

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

geheime Dateien werden nicht in Container kopiert werden:

Wenn Sie einem neu erstellten oder ausgeführten Dienst Zugriff auf ein Geheimnis gewähren, wird das entschlüsselte Geheimnis in den Container in einem speicherinternen Dateisystem

eingehängt

Weitere Informationen finden Sie unter:

+0

Hallo Astyagun: Ich stimme zu, dass die Verwendung der Geheimnisse-Funktion ist ein guter Weg, um dies zu nähern, aber um Ihre Antwort besser zu machen, wäre es sinnvoll, die wesentlichen Teile zu enthalten die Antwort hier und stellen Sie die Verbindungen als Referenz zur Verfügung. –

+0

Danke. Beispiele hinzugefügt –