Docker-in-docker: `Не удается подключиться к демону Docker по протоколу tcp://docker:2375`

Я пытаюсь вручную использовать докер:19.03.5-dind изображение, как показано в разделе "Как использовать это изображение".

  • Сначала я запускаю демон

    $ docker run --privileged -d --rm --name=docker-daemon \             --network=test  docker:19.03.5-dinde1f8544d30df5bc010d67e38b38be0f47306b29ab0fdeb32861c5716582c9917
  • Я вижу, что он включен и прослушивает порт 2376

    $ docker logs docker-daemon...time="2019-11-28T11:31:40.266976728Z" level=info msg="Daemon has completed initialization"time="2019-11-28T11:31:40.550083421Z" level=info msg="API listen on [::]:2376"time="2019-11-28T11:31:40.550169911Z" level=info msg="API listen on /var/run/docker.sock"
  • Затем я открываю клиент docker:

    $ docker run -it --rm --name=my-docker \      --network=test --link=docker-daemon:docker docker:19.03.5
  • От клиента я могу пинговать докер-демон и его докер в другой раз

    # ping docker-daemon -c1PING docker-daemon (172.20.0.2): 56 data bytes64 bytes from 172.20.0.2: seq=0 ttl=64 time=0.146 ms...# ping docker -c1PING docker (172.20.0.2): 56 data bytes64 bytes from 172.20.0.2: seq=0 ttl=64 time=0.177 ms...
  • Но все равно я не могу запустить docker:

    # docker psCannot connect to the Docker daemon at tcp://docker:2375. Is the docker daemon running?

Разве он не должен пытаться подключиться к порту 2376? Что я здесь упускаю из виду?


Мой хост работает под управлением Ubuntu 18.04 с Docker версии 18.09.7, сборка 2d0083d

Вам необходимо выполнить действия из связанной документации, которые включают в себя подключение каталога сертификатов в качестве тома в обоих контейнерах и передачу переменной env в клиентском контейнере:

$ docker run --privileged --name some-docker -d \    --network some-network --network-alias docker \    -e DOCKER_TLS_CERTDIR=/certs \    -v some-docker-certs-ca:/certs/ca \    -v some-docker-certs-client:/certs/client \    docker:dind$ docker run --rm --network some-network \    -e DOCKER_TLS_CERTDIR=/certs \    -v some-docker-certs-client:/certs/client:ro \    docker:latest version

Первое изображение заполняет монтирование тома, а второе изображение использует эти сертификаты для обмена данными через 2376. Без сертификатов он пытается подключиться к незашифрованному порту 2375, который по умолчанию не включен в изображениях 19.03 dind.