在Mac OS X上的Docker中启用远程API(boot2docker)

aks*_*ayl 7 docker boot2docker

在使用boot2docker时,我似乎无法弄清楚如何启用远程API.我试图使用dockerode如下:

Docker = require('dockerode')
docker = new Docker(socketPath: "/var/run/docker.sock")

container = docker.getContainer('<my_container_id>')

container.inspect (err, data) ->
  debug data
Run Code Online (Sandbox Code Playgroud)

尽管存在具有id''的容器,但数据为空.我怀疑这是因为OS X主机上没有/var/run/docker.sock,我需要使用类似的东西:

var docker2 = new Docker({host: 'http://192.168.1.10', port: 3000});
Run Code Online (Sandbox Code Playgroud)

...但无法弄清楚如何在VirtualBox VM中配置boot2docker或docker以启用通过http或tcp进行访问.

mas*_*asi 5

对于遇到这个问题的每个人,大多数时候你想要使用像boot2docker这样的东西来禁用TLS - 这是为开发和测试而构建的(不知道为什么boot2docker默认决定启用TLS)它会阻止你使用基本类似于您可以考虑的每个REST工具来访问远程API,因为它们都没有支持基于TLS的身份验证而没有相当多的配置.

因此,如果您只想在boot2docker中进行开发,请在boot2docker控制台中运行:

cp /etc/init.d/docker ~/docker.bak
sudo sed -i 's/DOCKER_TLS:=auto/DOCKER_TLS:=no/1' /etc/init.d/docker
sudo /etc/init.d/docker stop
sudo /etc/init.d/docker start
Run Code Online (Sandbox Code Playgroud)

它将禁用TLS并重新启动docker deamon.完成后,您应该能够打开http://your-boot2docker-ip:2375/info并获得一些输出.请注意,这与boot2docker 1.41相同.上面的sed命令重新执行的env变量的名称将来可能会更改.也许他们甚至会在将来的版本中默认禁用TLS.


Bry*_*yan 3

Docker,由 Boot2Docker 配置,默认支持从主机 OSX 机器的端口 2375 进行远程访问;这就是它告诉你做什么时所设置的export DOCKER_HOST=tcp://192.168.59.103:2375

如果您想从另一台计算机访问该端口,您需要配置 VirtualBox 网络以将流量路由到该端口。这可以通过使用以下命令进行端口转发来完成:

VBoxManage modifyvm "boot2docker-vm" --natpf1 "guestssh,tcp,,2375,,2375"
Run Code Online (Sandbox Code Playgroud)

那么代码中使用的地址new Docker就是 Mac 的 IP 地址。

您还可以在 VirtualBox GUI 中的 boot2docker-vm/settings/network/advanced/portforwarding 下进行配置。

请参阅VirtualBox 文档

请注意,如此处所述现在允许具有 IP 访问权限的任何人控制您的 Docker 安装,这可能是一个安全问题。