DOCKER_HOST 变量有啥作用?
Posted
技术标签:
【中文标题】DOCKER_HOST 变量有啥作用?【英文标题】:What does the DOCKER_HOST variable do?DOCKER_HOST 变量有什么作用? 【发布时间】:2014-10-03 18:44:07 【问题描述】:我是 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 虚拟机本身?)
【问题讨论】:
【参考方案1】:好的,我想我明白了。
客户端是安装在 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)
会生成这些命令,然后运行它们。
【讨论】:
【参考方案2】:经调查,还值得注意的是,当你想在新的终端窗口中开始使用 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
...
【讨论】:
【参考方案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/
【讨论】:
以上是关于DOCKER_HOST 变量有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章