В текущата версия на boot2docker (1.3.1) можете да направите това, като просто монтирате том към контейнера, напр.
$ docker run -it -v /var/run/docker.sock:/home/docker.sock myimage bash
[ root@51c0518f4d42:~ ]$ ls /home
docker.sock
Docker = require('dockerode')
docker = new Docker(socketPath: "/home/docker.sock")
// should work!
IMHO това е по-просто и по-чисто, отколкото да се забърквате с пренасочване на портове на VirtualBox
Това всъщност е същото като повечето примери за използване на Docker API клиент, т.е. „просто монтирайте докер сокета в контейнера като том“.
Може би като мен сте мислили, че поради начина, по който работи boot2docker, това няма да е възможно. В крайна сметка изглежда, че последните версии са настроени да споделят томове от вашия OS X хост, а не boot2docker vm, което бихте искали през повечето време. Но няма /var/run/docker.sock
път на вашия OS X хост, така че какво става?
Това, което всъщност се случва е, че директорията /Users
се монтира от вашия хост в boot2docker vm. Когато добавите том към контейнер под boot2docker, той все още споделя каквото и да е в този път във vm... просто се случва всички пътища под /Users
във vm да се монтират от хоста. Но всички пътища извън /Users
ще бъдат от самия boot2docker vm, а не от вашия хост.
i.e.
$ boot2docker ssh
docker@boot2docker:~$ ls /var/run
acpid.pid acpid.socket docker.pid docker.sock sshd.pid udhcpc.eth0.pid udhcpc.eth1.pid utmp
Има нашия файл с докер сокет и тъй като е извън директорията /Users
, можем да свържем този път към нашите контейнери като том.
(По някаква причина това не работи:
$ docker run -it -v /var/run/docker.sock
...файлът на сокета излиза като /var/run/docker.sock/
директория в нашия контейнер - изглежда като докер грешка.)
Трябва да използваме формата, разделена с двоеточие:
$ docker run -it -v /var/run/docker.sock:/home/docker.sock
person
Anentropic
schedule
04.12.2014