2

在我可以使用我的docker容器(在 OSX 上使用 Boot2Docker)之前,我总是必须记住输入

export DOCKER_HOST=tcp://$(boot2docker ip 2>/dev/null):2375

在我的终端中,我自然经常忘记这一点。

所以我想我只是将该行添加到我的~/.bashrc文件中,但是当我完成此操作并检查DOCKER_HOST它的值tcp://192.168.42.43:4243而不是tcp://192.168.42.43:2375.

分解它:

  • boot2docker ip=> "VM 的 Host 唯一接口 IP 地址是:192.168.59.103"
  • boot2docker ip 2=> "VM 的 Host 唯一接口 IP 地址是:192.168.59.103"
  • boot2docker ip 2>/dev/null=>“192.168.59.103”(好吧,我有点明白,但我不知道它是如何工作的,我也不知道它:4243是从哪里来的。”

这里实际发生了什么,为什么端口不同?

4

3 回答 3

10

如果您希望为您打开的每个终端自动设置 DOCKER_HOST 环境变量,请使用“boot2docker shellinit”命令。您可以将此行添加到您的 .bash_profile 以处理业务:

$(boot2docker shellinit)

不幸的是,如果您打开终端时您的 boot2docker 虚拟机没有运行,这会给您一个恼人的错误消息(“运行中的错误:虚拟机“boot2docker-vm”没有运行。”)将它放在您的 .bash_profile 中以抑制错误信息:

$(boot2docker shellinit 2>/dev/null)

更多细节在 Github

注意:如果您使用 Docker Machine 来管理 boot2docker,则等效命令为

eval "$(docker-machine env MACHINE-NAME)"

其中 MACHINE-NAME 是您的 boot2docker 机器的名称。

于 2014-10-09T21:35:53.957 回答
0

其他东西正在为您设置该环境变量。你为什么stderr要从那个命令转储到/dev/null. 会有一些额外的信息stderr吗?

我会做

export DOCKER_HOST="tcp://$(boot2docker ip 2>/dev/null):2375" ;
echo "Docker Host is set to ${DOCKER_HOST}"

对于设置的一些调试,然后在稍后阶段查询该值以查看是否有其他东西在弄乱它。

于 2014-08-10T07:43:35.703 回答
0

我认为 boot2docker 的 socket 命令在这里更有用,我们也可以稍微简化一下。

如果您在终端中运行它之前没有设置它:

  echo export DOCKER_HOST=\`boot2docker socket 2\>/dev/null\` >> ~/.bashrc

如果您已经对此感到困惑,只需将 .bashrc 中的行更改为:

  export DOCKER_HOST=`boot2docker socket 2>/dev/null`

现在要测试它是否可以打开一个新终端并运行docker run hello-world.

于 2014-09-24T08:27:22.977 回答