2016-01-21 17 views
10

Utilizzo Docker su Mac OS X con Docker Machine (con la macchina boot2docker predefinita) e utilizzo docker-compose per configurare il mio ambiente di sviluppo.Inserire le chiavi SSH dell'host in Docker Machine con Docker Compose

Diciamo che uno dei contenitori si chiama "stack". Ora quello che voglio fare è chiamata:

docker-composer run stack ssh [email protected] 

La mia chiave pubblica (che è stato aggiunto alla stackoverflow.com e che sarà utilizzato per l'autenticazione me) si trova sulla macchina host. Voglio che questa chiave sia disponibile nel contenitore Docker Machine in modo che possa autenticare me stesso contro stackoverflow utilizzando quella chiave all'interno del contenitore. Preferibilmente senza copiare fisicamente la mia chiave su Docker Machine.

C'è un modo per farlo? Inoltre, se la mia chiave è protetta da password, c'è un modo per sbloccarla una volta così dopo ogni iniezione non dovrò inserire manualmente la password?

risposta

25

È possibile aggiungere questo alla tua finestra mobile-compose.yml (supponendo che l'utente all'interno del contenitore è root):

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

Inoltre è possibile verificare la presenza di more advanced solution with ssh agent (non ho provato io stesso)

+6

Nota questa soluzione potrebbe non riuscire se le chiavi SSH appartengono a un utente sulla macchina host –

+1

Non funziona in Mac OSX 10.12.1, docking-compose 1.8 –

+4

Mentre è possibile farlo in fase di esecuzione, non sarà possibile accedere al volume al momento della compilazione. –

2

È possibile inoltrare l'agente SSH:

+1

Hai già dato la risposta qui http://stackoverflow.com/a/36648428/228370 E una nota: Questo non funziona per mac come @ joe-saw ha sottolineato, perché i socket di dominio unix non sono proxy – 23tux

1

La finestra mobile ha una funzione denominata segreti, che può essere utile qui. Per usarlo si potrebbe aggiungere il seguente codice a 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 

Poi il nuovo file segreto è accessibile in Dockerfile come questo:

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

file segreti non saranno copiati nel contenitore:

Quando si concede un accesso di servizio appena creato o in esecuzione a un segreto, il segreto decrittografato viene montato nel contenitore in un filesystem in memoria

Per maggiori dettagli si rimanda a:

+0

Ciao astyagun: Sono d'accordo che l'uso della funzione Secrets è un buon modo per avvicinarsi a questo, ma per rendere la tua risposta migliore sarebbe utile includere le parti essenziali di la risposta qui e fornire i collegamenti per riferimento. –

+0

Grazie. aggiunti esempi –

Problemi correlati