在.bashrc中导出DOCKER_HOST对terminal中的相同命令产生不同的结果
在我可以使用我的docker
容器(在OSX上使用Boot2Docker)之前,我总是要记得进入
export DOCKER_HOST=tcp://$(boot2docker ip 2>/dev/null):2375
在我的terminal,自然我经常忘记这一点。
所以我想我只是将该行添加到我的~/.bashrc
文件,但是当我这样做,并检查DOCKER_HOST
的值是tcp://192.168.42.43:4243
而不是tcp://192.168.42.43:2375
。
打破它:
-
boot2docker ip
=>“虚拟机的主机接口IP地址是:192.168.59.103” -
boot2docker ip 2
=>“虚拟机的主机接口IP地址是:192.168.59.103” -
boot2docker ip 2>/dev/null
=>“192.168.59.103”(好吧,我得到的,但我不知道如何工作,我不知道:4243
是从哪里来的。
这里究竟发生了什么,港口为什么不同呢?
还有一件事是为你设置这个环境variables。 你为什么把stderr
从该命令转储到/dev/null
。 是否有一些额外的信息来stderr
?
我会做
export DOCKER_HOST="tcp://$(boot2docker ip 2>/dev/null):2375" ; echo "Docker Host is set to ${DOCKER_HOST}"
对于一些debugging,因为它被设置,然后在稍后查询值,看看是否有其他东西搞乱了它。
如果您希望为您打开的每个terminal自动设置DOCKER_HOST环境variables,请使用“boot2docker shellinit”命令。 您可以将此行添加到您的.bash_profile中以照顾业务:
$(boot2docker shellinit)
不幸的是,如果你打开terminal的时候你的boot2docker虚拟机没有运行(“运行中的错误:虚拟机”boot2docker-vm“没有运行”),这会给你一个烦人的错误信息。把它放在你的.bash_profile中,错误信息:
$(boot2docker shellinit 2>/dev/null)
在Github的更多细节
注意:如果您使用Docker Machine来pipe理boot2docker,则等效命令是
eval "$(docker-machine env MACHINE-NAME)"
MACHINE-NAME是你的boot2docker机器的名字。
我认为boot2docker的socket命令在这里比较有用,我们也可以简化一下。
如果你之前没有在terminal上运行这个设置,
echo export DOCKER_HOST=\`boot2docker socket 2\>/dev/null\` >> ~/.bashrc
如果你已经搞乱了这个,把你的.bashrc中的行改为:
export DOCKER_HOST=`boot2docker socket 2>/dev/null`
现在testing它已经开放了一个新的terminal,并运行docker run hello-world
。