WSL2でERROR [internal]とかinit: (13747) ERROR: UtilConnectToInteropServer:307などのエラー

docker buildを実行すると、以下のようなエラーが出ました。

Building apache24
[+] Building 0.9s (2/3) 
[+] Building 1.0s (3/3) FINISHED 
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 32B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> ERROR [internal] load metadata for docker.io/library/httpd:2.4-alpine 1.0s
------
> [internal] load metadata for docker.io/library/httpd:2.4-alpine:
------

 

なんだこのエラーと思って、試しにWSL2上ではなくてWindows上で実行してみると動いたので

WSL2独特のエラーだと判断。

 

試しにWindows上でdocker loginを実行すると「お前はすでにログインしてるぜ」的なメッセージが表示されましたが

WSL2上でdocker loginを実行しても、以下のようなエラーが出ました。

➜ docker login 
<3>init: (13562) ERROR: UtilConnectToInteropServer:307: connect failed 2
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: hogehoge
Password:

<3>init: (13747) ERROR: UtilConnectToInteropServer:307: connect failed 2
Error saving credentials: error storing credentials - err: exit status 1, out: ``

 

なので、そもそもdockerhubとの認証?がうまくいってないのかな?と判断。

このエラー名でググってみると以下のサイトに「こうしたら直るぜ」的なことが書いてました。

https://superuser.com/questions/1602401/vscode-terminal-behaves-strangely-when-opening-a-project-that-is-inside-wsl2

 

たとえば、zshなら.zshrcに以下を登録して、zshを再起動。

fix_wsl2_interop() {
    for i in $(pstree -np -s $$ | grep -o -E '[0-9]+'); do
        if [[ -e "/run/WSL/${i}_interop" ]]; then
            export WSL_INTEROP=/run/WSL/${i}_interop
        fi
    done
}

その後ターミナル上でfix_wsl2_interopと打つことで関数を実行。

これでエラーが出なくなりました。

 

正直、いまいち意味は分かってませんが「これはWSLとDocker独特のトラブルで、よく分からないけどこれを実行したら直る」ってことだけ覚えとくことにしました。

シェルスクリプト文法はややこしい割に覚えるメリットが薄いので理解する気が起きない・・・。

 

おわり

仮想環境
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました