“tls:收到长度超过20527的超大记录”试图从Win10 WSL Bash“docker run”

时间:2018-03-01 12:31:28

标签: windows docker tls1.2 windows-subsystem-for-linux docker-windows

再现

最新的Docker Edge(18.03.0-ce-rc1-win54(16164))安装在Win10上。

在更新到最新的Docker CE Edge版本之前切换到“Linux容器”(但最新的“Docker for Windows”用户界面不再显示切换选项了吗?!)。

从Windows CMD运行docker run hello-world没问题。

但是从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命令:

  

在没有TLS的tcp:// localhost:2375上公开守护程序

问题

我想知道为什么这不是Windows Docker / WSL使用的常见报告问题。似乎有些东西搞砸了,但我不知道从哪里开始研究。

例如:

  1. 为什么问题只出现在WSL Bash而不是Windows下 CMD?
  2. 如何更改daemon.json的{​​{1}}值作为某些与SO相关的消息建议?
  3. 感谢任何帮助/指示!

    (= PA =)

3 个答案:

答案 0 :(得分:5)

解决方案

由于这让我有点害怕,我又做了一次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问题已经消失!

快乐对接。

答案 1 :(得分:1)

建议的解决方案

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.

因此,我必须通过执行以下操作手动卸载Docker:

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

问题已解决。

答案 2 :(得分:1)

以下是解决问题的步骤:

  1. 从WSL(Ubuntu)中删除docker.io(如果有)和相关软件包:

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

    注意:如果出现错误( function not implemented ),请尝试通过upgrade WSL(需要一段时间):

    sudo -S apt-mark hold procps strace sudo
    sudo -S env RELEASE_UPGRADER_NO_SCREEN=1 do-release-upgrade
    
  2. WSL(Ubuntu)中的
  3. Install Docker CE

    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
    
  4. 在Windows的Docker app中公开不带TLS的守护程序

  5. 通过在WSL中定义DOCKER_HOST变量来连接到它:

    export DOCKER_HOST=:2375
    

相关: