Nella versione corrente di boot2docker (1.3.1) si può fare questo da solo il montaggio di un volume al contenitore, ad esempio:
$ docker run -it -v /var/run/docker.sock:/home/docker.sock myimage bash
[ [email protected]:~ ]$ ls /home
docker.sock
Docker = require('dockerode')
docker = new Docker(socketPath: "/home/docker.sock")
// should work!
IMHO questo è più semplice e più pulito di fare in giro con il port forwarding VirtualBox
Questo è in realtà lo stesso del modo in cui vengono definiti la maggior parte degli esempi di utilizzo di un client API Docker, ad esempio "basta montare il socket docker nel contenitore come volume".
Forse come me hai pensato a causa del modo in cui funziona boot2docker questo non sarebbe possibile. Dopotutto, sembra che le versioni recenti siano configurate per condividere i volumi dal proprio host OS X anziché dal vm boot2docker, che è ciò che si vorrebbe la maggior parte del tempo. Ma non c'è il percorso /var/run/docker.sock
sul tuo host OS X, quindi cosa sta succedendo?
Quello che effettivamente accade è che la dir /Users
viene montata dall'host nel vm boot2docker. Quando aggiungi un volume a un contenitore sotto boot2docker, continua a condividere qualsiasi cosa si trovi su quel percorso nel vm ... succede solo che qualsiasi percorso sotto /Users
nel VM sia montato dall'host. Ma qualsiasi percorso al di fuori di /Users
sarà dal vm boot2docker stesso e non dal tuo host.
, ad es.
$ boot2docker ssh
[email protected]:~$ ls /var/run
acpid.pid acpid.socket docker.pid docker.sock sshd.pid udhcpc.eth0.pid udhcpc.eth1.pid utmp
c'è il nostro file di socket finestra mobile, e dal momento che è al di fuori della directory /Users
possiamo collegare questa strada nelle nostre contenitori come volume.
(per qualche motivo questo non funziona:
$ docker run -it -v /var/run/docker.sock
... il file di socket viene fuori come una directory /var/run/docker.sock/
nel nostro contenitore - sembra come un insetto finestra mobile.)
Abbiamo per utilizzare il modulo separata da due punti:
$ docker run -it -v /var/run/docker.sock:/home/docker.sock
Grazie Bryan. Un'altra cosa che sto cercando di capire è come usare l'arricciatura per parlare con l'API docker. Avete alcuni suggerimenti? – akshayl
meglio chiederlo come una domanda separata. – Bryan