web-dev-qa-db-ja.com

「tls:長さ20527で受信した特大のレコード」は、Win10 WSL Bashからのみ「docker run」を試行します

再生

Win10にインストールされた最新のDocker Edge(18.03.0-ce-rc1-win54(16164))。

最新のDocker CE Edgeバージョンに更新する前に「Linux Container」に切り替えました(ただし、最新の「Windows Docker」UIには切り替えオプションが表示されなくなりました!?)。

実行しても問題ありません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コマンドを実行するために必要です:

TLSなしでtcp:// localhost:2375でデーモンを公開する

質問

これがWindows Docker/WSLの使用に関して報告されている一般的な問題ではないのはなぜかと思います。何かがめちゃくちゃになっているように見えますが、どこから調べ始めればいいのかわかりません。

例えば:

  1. Windows CMDではなくWSL Bashでのみ問題が表示されるのはなぜですか?
  2. 変更方法 daemon.jsonの値"insecure-registries": [] as some SO関連メッセージのアドバイス?

任意のヘルプ/ポインタをいただければ幸いです!

(= PA =)

8
spex66

解決

これに少し驚いたので、別の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 one-上記のページで説明した手順に従って、TLSの問題はなくなりました!

ハッピードッキング。

6
spex66

提案されたソリューション

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
mauridb

問題を解決する手順は次のとおりです。

  1. docker.io(存在する場合)および関連パッケージをWSL(Ubuntu)から削除します。

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

    注:エラー(実装されていない機能)の場合、 WSLのアップグレード by(しばらく時間がかかります):

    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. Windows上の Dockerアプリ でTLSなしでデーモンを公開します。

  4. WSLでDOCKER_Host変数を定義して接続します:

    export DOCKER_Host=:2375
    

関連:

1
kenorb