DOCKER_HOST变量是用来做什么的?

84

我是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 VM 本身吗?)
3个回答

93

好的,我明白了。

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

主机是Boot2Docker虚拟机。

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

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

启动Boot2Docker时,弹出的终端窗口已经设置了DOCKER_HOST,所以可以使用docker命令。但是,在其他终端窗口中运行Docker命令,需要在这些窗口中设置此变量。

未设置它会显示以下消息:

$ 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 会返回一组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)会生成这些命令,并立即执行它们。

5

经过调查,值得注意的是,当你想在新的终端窗口中开始使用docker时,正确的命令是:

$(boot2docker shellinit)

我已经测试过以下命令:

>>  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 info返回了同样的错误。然而,当使用$(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
...

1

它指向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

See:
http://docs.docker.com/userguide/dockerizing/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接