"tls: oversized record received with length 20527" 仅尝试 "docker run" 从 Win10 WSL Bash
"tls: oversized record received with length 20527" trying to "docker run" from Win10 WSL Bash only
再生产
最新的 Docker Edge (18.03.0-ce-rc1-win54 (16164)) 安装在 Win10 上。
在更新到最新的 Docker CE Edge 版本之前切换到 "Linux Container"(但是最新的 "Docker for Windows" UI 不再显示切换选项?!)。 =20=]
从 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
命令来说是必需的:
Expose daemon on tcp://localhost:2375 without TLS
问题
我想知道为什么这不是 Windows Docker / WSL 使用的常见报告问题。似乎有些东西搞砸了,但我不知道从哪里开始研究。
例如:
- 为什么问题只出现在WSL Bash下而不是Windows
命令?
- 如何根据一些与 SO 相关的消息建议更改
"insecure-registries": []
的 daemon.json
值?
感谢任何帮助/指点!
(=PA=)
解决方案
因为这把我吓坏了,我做了另一个 Google session 并在这边的评论中找到了解决方案:
* 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 问题消失了!
对接愉快
建议的解决方案
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
问题已解决。
解决问题的步骤如下:
从 WSL (Ubuntu) 中删除 docker.io
(如果存在)和相关包:
sudo apt-get remove docker.io
sudo apt-get remove docker*
注意:如果出现错误(function not implemented), try to upgrade WSL by(需要一段时间):
sudo -S apt-mark hold procps strace sudo
sudo -S env RELEASE_UPGRADER_NO_SCREEN=1 do-release-upgrade
Install 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
在 Windows 上的 Docker app 中不使用 TLS 公开守护程序。
通过在 WSL 中定义 DOCKER_HOST
变量连接到它:
export DOCKER_HOST=:2375
相关:
- Cannot attach to a container on WSL 在 GitHub
再生产
最新的 Docker Edge (18.03.0-ce-rc1-win54 (16164)) 安装在 Win10 上。
在更新到最新的 Docker CE Edge 版本之前切换到 "Linux Container"(但是最新的 "Docker for Windows" UI 不再显示切换选项?!)。 =20=]
从 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
命令来说是必需的:
Expose daemon on tcp://localhost:2375 without TLS
问题
我想知道为什么这不是 Windows Docker / WSL 使用的常见报告问题。似乎有些东西搞砸了,但我不知道从哪里开始研究。
例如:
- 为什么问题只出现在WSL Bash下而不是Windows 命令?
- 如何根据一些与 SO 相关的消息建议更改
"insecure-registries": []
的daemon.json
值?
感谢任何帮助/指点!
(=PA=)
解决方案
因为这把我吓坏了,我做了另一个 Google session 并在这边的评论中找到了解决方案: * 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 问题消失了!
对接愉快
建议的解决方案
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
问题已解决。
解决问题的步骤如下:
从 WSL (Ubuntu) 中删除
docker.io
(如果存在)和相关包:sudo apt-get remove docker.io sudo apt-get remove docker*
注意:如果出现错误(function not implemented), try to upgrade WSL by(需要一段时间):
sudo -S apt-mark hold procps strace sudo sudo -S env RELEASE_UPGRADER_NO_SCREEN=1 do-release-upgrade
Install 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
在 Windows 上的 Docker app 中不使用 TLS 公开守护程序。
通过在 WSL 中定义
DOCKER_HOST
变量连接到它:export DOCKER_HOST=:2375
相关:
- Cannot attach to a container on WSL 在 GitHub