在.bashrc中导出DOCKER_HOST会对终端中的同一命令产生不同的结果

Dav*_*Sag 2 bash .bash-profile docker boot2docker

在我可以使用我的docker容器之前(在OSX上使用Boot2Docker)我总是要记得输入

export DOCKER_HOST=tcp://$(boot2docker ip 2>/dev/null):2375
Run Code Online (Sandbox Code Playgroud)

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

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

打破它:

  • boot2docker ip >"VM的主机唯一接口IP地址是:192.168.59.103"
  • boot2docker ip 2 >"VM的主机唯一接口IP地址是:192.168.59.103"
  • boot2docker ip 2>/dev/null=>"192.168.59.103"(好吧我有点理解,但我不知道它是如何工作的,我不知道:4243它来自哪里."

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

Mar*_*ian 10

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

$(boot2docker shellinit)
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果你的boot2docker虚拟机在你打开终端时没有运行,这会给你一个恼人的错误信息("运行中的错误:VM"boot2docker-vm"没有运行.")把它放在.bash_profile而不是压制错误信息:

$(boot2docker shellinit 2>/dev/null)
Run Code Online (Sandbox Code Playgroud)

Github的更多细节

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

eval "$(docker-machine env MACHINE-NAME)"
Run Code Online (Sandbox Code Playgroud)

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

  • +1,你甚至可以简单地使用`$(boot2docker shellinit)` (2认同)