Подтвердить что ты не робот

Что делает переменная DOCKER_HOST?

Я новичок в Docker, используя Boot2Docker на OSX. После его загрузки это сообщение предоставляется:

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.

Зная, что это "безопасно" не говорит, почему это полезно.

Что я не понимаю:

  • Что такое "клиент-докер"?
  • Что такое "демон" докера?
  • Что такое "хост" докера? (Сама VM Boot2Docker?)
4b9b3361

Ответ 1

Хорошо, думаю, я понял.

клиент - это команда 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

Один из способов исправить это было бы просто:

$ 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

При исследовании также стоит отметить, что, когда вы хотите начать использовать докер в новом окне терминала, правильная команда:

$(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

Обратите внимание, что информация о докере вернула ту же ошибку. однако.. при использовании $(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

Он указывает на хост докера! Я выполнил следующие шаги:

$ 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/