tls: получена негабаритная запись длиной 20527 при попытке запустить докер только из Win10 WSL Bash

воспроизведение

Последняя версия Docker Edge (18.03.0-ce-rc1-win54 (16164)), установленная на Win10.

Переключился на «Контейнер Linux» перед обновлением до последней версии Docker CE Edge (но в последнем пользовательском интерфейсе «Docker для Windows» больше не отображается опция переключения ?!).

Нет проблем запустить docker run hello-world из Windows CMD.

Но вызов того же из WSL Bash (последняя версия Win10 1709) всегда отвечает этим сообщением об ошибке tls:

$ docker images
REPOSITORY                        TAG                        IMAGE ID            CREATED             SIZE
continuumio/miniconda3            latest                     29af5106b6a4        17 hours ago        443 MB
hello-world                       latest                     f2a91732366c        3 months ago        1.85 kB

$ docker --version
Docker version 1.13.1, build 092cba3

$ docker version
Client:
 Version:      1.13.1
 API version:  1.26
 Go version:   go1.6.2
 Git commit:   092cba3
 Built:        Thu Nov  2 20:40:23 2017
 OS/Arch:      linux/amd64

Server:
 Version:      18.03.0-ce-rc1
 API version:  1.37 (minimum version 1.12)
 Go version:   go1.9.4
 Git commit:   c160c73
 Built:        Thu Feb 22 02:42:37 2018
 OS/Arch:      linux/amd64
 Experimental: true

$ echo $DOCKER_HOST
tcp://0.0.0.0:2375

$ docker run hello-world
tls: oversized record received with length 20527

Этот параметр кажется несвязанным, но он необходим для запуска команды docker:

Выставить демон на tcp: // localhost: 2375 без TLS

вопрос

Интересно, почему это не частая проблема, о которой сообщают при использовании Windows Docker / WSL. Кажется, что-то не так, но я не знаю, с чего начать.

Например:

  1. Почему проблема появляется только в WSL Bash, а не в Windows CMD?
  2. Как изменить значение daemon.json для "insecure-registries": [] в некоторых советах по сообщениям, связанным с SO?

Любая помощь / указатели приветствуются!

(=PA=)


person spex66    schedule 01.03.2018    source источник
comment
Это явно путаница TLS / no-TLS, потому что сервер явно отвечает HTTP / ... (без TLS), и клиент пытается проанализировать это как ответ TLS, который включает в себя байты 3 и 4 = P косая черта = шестнадцатеричный 50 2F как длина и шестнадцатеричное 502F = десятичное 20527 действительно является недопустимой длиной. HTH.   -  person dave_thompson_085    schedule 08.03.2018


Ответы (3)


Решение

Поскольку это меня немного напугало, я провел еще один сеанс Google и нашел решение в комментариях на этой стороне: * https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly

Вкратце: * Проблема, которую я описал, возникает из-за устаревшей docker.io установки по умолчанию вместо последней и поддерживаемой docker-ce установки.

Как только я удалил старую с помощью (конечный * предназначен!):

sudo apt-get remove --purge docker*

и установил последний docker-ce - в соответствии с процедурой, описанной на странице выше - проблема с TLS исчезла!

Удачной стыковки.

person spex66    schedule 16.03.2018

Предлагаемое решение

sudo apt-get remove --purge docker*

у меня не сработало, так как как только я попытался запустить команду apt-get remove, я получил следующую ошибку:

No process in pidfile '/var/run/docker-ssd.pid' found running; none killed.
invoke-rc.d: initscript docker, action "stop" failed.

Поэтому мне пришлось вручную удалить докер, выполнив это:

sudo rm /var/lib/dpkg/info/docker.io.*
sudo rm /var/cache/apt/archives/docker.io*
sudo rm /etc/default/docker
sudo rm /etc/init.d/docker
sudo rm /etc/init/docker.conf

и после этого я просто следовал инструкциям здесь:

https://nickjanetakis.com/blog/setting-up-docker-for-windows-and-wsl-to-work-flawlessly

Проблема исправлена.

person mauridb    schedule 08.08.2018

Вот шаги для решения проблемы:

  1. Удалите docker.io (если есть) и связанные пакеты из WSL (Ubuntu):

    sudo apt-get remove docker.io
    sudo apt-get remove docker*
    

    Примечание. В случае ошибок (функция не реализована) попробуйте обновить WSL (это займет некоторое время):

    sudo -S apt-mark hold procps strace sudo
    sudo -S env RELEASE_UPGRADER_NO_SCREEN=1 do-release-upgrade
    
  2. Установить Docker CE в WSL (Ubuntu):

    sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
    sudo apt-get update
    sudo apt-get install docker-ce
    
  3. Откройте демон без TLS в своем приложении Docker в Windows.

  4. Подключитесь к нему, определив переменную DOCKER_HOST в WSL:

    export DOCKER_HOST=:2375
    

Связанный:

person kenorb    schedule 04.10.2018