В текущей версии boot2docker (1.3.1), вы можете сделать это, просто монтировании тома в контейнере, например:
$ 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!
ИМХО это проще и чище, чем возиться с пересылкой VirtualBox порт
Это на самом деле то же самое, что и большинство примеров использования клиента Docker API, то есть «просто подключите гнездо докера в контейнер в качестве тома».
Возможно, мне понравилось, что, по-моему, из-за работы boot2docker это было бы невозможно. В конце концов, похоже, что последние версии настроены для обмена томами с вашего хоста OS X, а не с boot2docker vm, чего вы хотели бы большую часть времени. Но на вашем хосте OS X нет пути /var/run/docker.sock
, так что происходит?
На самом деле происходит то, что редуктор /Users
установлен с вашего хоста в boot2docker vm. Когда вы добавляете том в контейнер под boot2docker, он по-прежнему делится тем, что находится на этом пути в vm ... просто случается, что любые пути под /Users
в vm монтируются с хоста. Но любые пути вне /Users
будут из самого boot2docker vm, а не вашего хоста.
i.e.
$ boot2docker ssh
[email protected]:~$ 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 ошибка.)
У нас есть использовать разделенные двоеточия формы:
$ docker run -it -v /var/run/docker.sock:/home/docker.sock
Спасибо Брайан. Другое дело, что я изо всех сил пытаюсь понять, как использовать завиток, чтобы поговорить с API докеров. У вас есть несколько указателей? – akshayl
лучший спросив это как отдельный вопрос. – Bryan