DOCKER_HOST变量有什么作用?

Ste*_*ett 55 macos daemon virtual-machine docker boot2docker

我是Docker的新手,在OSX上使用Boot2Docker.启动后,会显示以下消息:

To connect the Docker client to the Docker daemon, please set
export DOCKER_HOST=tcp://192.168.59.103:2375
Run Code Online (Sandbox Code Playgroud)

即使没有它,基本的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.
Run Code Online (Sandbox Code Playgroud)

知道它是"安全的"并没有说明为什么它有用.

我不清楚的是:

  1. 什么是码头"客户"?
  2. docker"守护进程"是什么?
  3. docker"host"是什么?(Boot2Docker VM本身?)

Ste*_*ett 68

好的,我想我明白了.

客户端docker安装到OS X.命令

主机是Boot2Docker VM.

守护在里面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
Run Code Online (Sandbox Code Playgroud)

解决这个问题的一种方法是简单地执行此操作:

$ export DOCKER_HOST=tcp://192.168.59.103:2375
Run Code Online (Sandbox Code Playgroud)

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

$ $(boot2docker shellinit)
$ docker run hello-world
Hello from Docker. [...]
Run Code Online (Sandbox Code Playgroud)

要说明这个可能不直观的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
Run Code Online (Sandbox Code Playgroud)

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

  • 这也适用于`$(boot2docker shellinit)`. (4认同)

dda*_*son 5

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

$(boot2docker shellinit)
Run Code Online (Sandbox Code Playgroud)

我测试过这些命令:

>>  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
Run Code Online (Sandbox Code Playgroud)

请注意,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
...
Run Code Online (Sandbox Code Playgroud)