DOCKER_HOSTvariables是做什么的?

我是Docker的新手,在OSX上使用Boot2Docker。 启动后,给出这个消息:

To connect the Docker client to the Docker daemon, please set export DOCKER_HOST=tcp://192.168.59.103:2375 

然而即使没有它,基本的Docker命令(例如docker run hello-world )也可以正常工作。

安装说明不是很有用的信息:

 Note: If you see a message in the terminal that looks something like this: To connect the Docker client to the Docker daemon, please set: export DOCKER_HOST=tcp://192.168.59.103:2375 you can safely set the evironment variable as instructed. 

知道这是“安全的”并没有说明为什么它是有用的。

我不清楚的是:

  1. 什么是docker“客户端”?
  2. 什么是docker“守护进程”?
  3. 什么是docker“主机”? (Boot2Docker虚拟机本身?)

好的,我想我明白了。

客户端是安装到OS X的docker命令。

主机是Boot2Docker虚拟机。

守护进程是在Boot2Docker内运行的后台服务。

这个variables告诉客户端如何连接到守护进程。

启动Boot2Docker时,popup的terminal窗口已经设置了DOCKER_HOST ,这就是为什么DOCKER_HOST命令可以工作。 但是,要在其他terminal窗口中运行Docker命令,则需要在这些窗口中设置此variables。

如果没有设置,则会显示如下信息:

 $ docker run hello-world 2014/08/11 11:41:42 Post http:///var/run/docker.sock/v1.13/containers/create: dial unix /var/run/docker.sock: no such file or directory 

解决这个问题的一个方法就是简单地做到这一点:

 $ export DOCKER_HOST=tcp://192.168.59.103:2375 

但正如其他人指出的那样,最好这样做:

 $ $(boot2docker shellinit) $ docker run hello-world Hello from Docker. [...] 

为了说明这个可能非直观的Bash命令,运行boot2docker shellinit返回一组设置环境variables的Bash命令:

 export DOCKER_HOST=tcp://192.168.59.103:2376 export DOCKER_CERT_PATH=/Users/ddavison/.boot2docker/certs/boot2docker-vm export DOCKER_TLS_VERIFY=1 

因此运行$(boot2docker shellinit)生成这些命令, 然后运行它们

经过调查,还值得注意的是,当您想要在新的terminal窗口中使用docker时,正确的命令是:

 $(boot2docker shellinit) 

我testing了这些命令:

 >> docker info Get http:///var/run/docker.sock/v1.15/info: dial unix /var/run/docker.sock: no such file or directory >> boot2docker shellinit Writing /Users/ddavison/.boot2docker/certs/boot2docker-vm/ca.pem Writing /Users/ddavison/.boot2docker/certs/boot2docker-vm/cert.pem Writing /Users/ddavison/.boot2docker/certs/boot2docker-vm/key.pem export DOCKER_HOST=tcp://192.168.59.103:2376 export DOCKER_CERT_PATH=/Users/ddavison/.boot2docker/certs/boot2docker-vm export DOCKER_TLS_VERIFY=1 >> docker info Get http:///var/run/docker.sock/v1.15/info: dial unix /var/run/docker.sock: no such file or directory 

请注意,docker信息返回相同的错误。 然而..当使用$(boot2docker shellinit)

 >> $(boot2docker init) Writing /Users/ddavison/.boot2docker/certs/boot2docker-vm/ca.pem Writing /Users/ddavison/.boot2docker/certs/boot2docker-vm/cert.pem Writing /Users/ddavison/.boot2docker/certs/boot2docker-vm/key.pem >> docker info Containers: 3 ... 

它指向docker主机! 我遵循这些步骤:

 $ boot2docker start Waiting for VM and Docker daemon to start... .............................. Started. To connect the Docker client to the Docker daemon, please set: export DOCKER_HOST=tcp://192.168.59.103:2375 $ export DOCKER_HOST=tcp://192.168.59.103:2375 $ docker run ubuntu:14.04 /bin/echo 'Hello world' Unable to find image 'ubuntu:14.04' locally Pulling repository ubuntu 9cbaf023786c: Download complete 511136ea3c5a: Download complete 97fd97495e49: Download complete 2dcbbf65536c: Download complete 6a459d727ebb: Download complete 8f321fc43180: Download complete 03db2b23cf03: Download complete Hello world 

看到:
http://docs.docker.com/userguide/dockerizing/