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.
知道这是“安全的”并没有说明为什么它是有用的。
我不清楚的是:
- 什么是docker“客户端”?
- 什么是docker“守护进程”?
- 什么是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