0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[WSL / docker] Docker を install できない! wsl のバージョンが原因でGPG key作成に失敗していた

Posted at

1. 概要

1-1. 対象者 / 前提条件

  • 使用しているのはwindows上のWSL環境
  • dockerインストールしたいのに、その手前のGPG key取得でエラー、もしくはapt updateでエラー発生

1-2. 起きたこと

Dockerをインストールする際、以下の公式サイトに記載の手順に従うと思うのですが、

2. Add Docker’s official GPG key:の部分でエラーになった。

2. Add Docker’s official GPG key:

bash
$ sudo mkdir -p /etc/apt/keyrings
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

このままだとDockerがインストールできないんじゃぁ~

これを解消できたので、方法を記載しておく。

2. エラー内容

エラーはこんな感じ。
今はもう発生していないので再現できないが、大体こんな感じの文言が出ていたと思う。

curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.haxx.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

※エラー文言は、類似のエラーに遭遇している方の投稿からコピーしています。

ちなみに、このままの状態でapt updateすると以下のようなエラーになった。

bash
$ sudo apt update
Hit:1 https://download.docker.com/linux/ubuntu focal InRelease                                                                  
Hit:2 http://archive.ubuntu.com/ubuntu focal InRelease                                                                          
Err:1 https://download.docker.com/linux/ubuntu focal InRelease               
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8
Get:3 http://archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]
Get:4 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]
Get:5 http://archive.ubuntu.com/ubuntu focal-backports InRelease [108 kB]
Fetched 336 kB in 2s (156 kB/s)    
Reading package lists... Done
Building dependency tree       
Reading state information... Done
2 packages can be upgraded. Run 'apt list --upgradable' to see them.
W: An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: https://download.docker.com/linux/ubuntu focal InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8
W: Failed to fetch https://download.docker.com/linux/ubuntu/dists/focal/InRelease  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8
W: Some index files failed to download. They have been ignored, or old ones used instead.

最後の3行がエラー部分。

3. 対策

上記エラー解消までの手順は以下の通り。

  1. 現状確認
  2. 「仮想マシンプラットフォーム」の有効化
  3. カーネル コンポーネントの更新
  4. wslのバージョンを変更 (1→2)

2, 3が未実施の場合、以下のエラーが発生します。

  • 仮想マシンプラットフォームが無効状態のとき (2未対応時)
powershell
> wsl --set-version Ubuntu-20.04 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮想化が有効になっていることを確認してください。
詳細については、https://aka.ms/wsl2-install を参照してください
  • カーネル コンポーネントが未更新のとき (3未対応時)
powershell
> wsl --set-version Ubuntu-20.04 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください

使っているマシンによっては、2, 3は既に対応済みで不要な可能性があるので、2, 3については、上記エラーが出た場合のみ対応すればよいと思います。

3-1. 現状確認

windowsホスト上からpowershellを起動して、wslのバージョンを確認します。

powershell
PS C:\Users\Seiya_Sasaki> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         1

私のwslはversionが1でした。

※もし既にversionが2なのに、この問題が発生しているのであれば、エラーの原因は別にあると思いますので、他の記事をあたってください。

3-2. 「仮想マシンプラットフォーム」の有効化

※未実施の場合のみ、以下の▶マークをクリック!

ここをクリック

windows11の場合の「仮想マシンプラットフォーム」の有効化方法を記載しておきます。

まず、タスクバーにある、虫眼鏡アイコンクリック。

2022-10-16_13h20_48.png

次に、出現したポップアップウィンドウ内の検索窓に「windowsの機能」と入力し、「windowsの機能の有効化または無効化」を選択。

2022-10-16_13h22_02.png

「Windows の機能」と書かれたWindowが現れたら、下にスクロールしていくと「仮想マシン プラットフォーム」という項目があるので、チェックをつけましょう。

2022-10-16_13h29_26.png

そして、OKボタンを押します。

もしかしたら、ここで再起動を促されるかもしれません。

3-3. カーネル コンポーネントの更新

※未実施の場合のみ、以下の▶マークをクリック!

ここをクリック

まず、powershell上に表示される、カーネルコンポーネント更新が未実施の場合の参照先(https://aka.ms/wsl2kernel)を開きましょう。

すると、以下のような画面に飛ぶので、

2022-10-16_13h36_38.png

「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」と記載されたリンクをクリックしてwsl_update_x64.msiをダウンロードします。
これを実行すると、カーネルコンポーネントが更新されます。

もしかしたら、この後再起動を促されるかもしれません。

3-4. wslのバージョンを変更 (1→2)

wslバージョンの変更は、windows powershellから行います。
以下のコマンドを実行していきましょう。

Ubuntu-20.04と書かれている部分は、自身のLinux Distribution名で置き換えてください。

powershell
> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         1

> wsl --set-version Ubuntu-20.04 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。

> wsl --set-default-version 2
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
この操作を正しく終了しました。

> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-20.04    Running         2

これでwslのバージョン変更は完了!

4. Docker install 再チャレンジ

再度GPG keyの作成を試みます。

以降は、wslを起動してLinux仮想マシンの中でコマンドを実行していきます。

bash
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
File '/etc/apt/keyrings/docker.gpg' exists. Overwrite? (y/N) y

File '/etc/apt/keyrings/docker.gpg' exists. Overwrite?という表示が出るのは、一度作成に失敗してゴミファイルが残っている場合のみす。
この場合はyと入力し、Enterキーを押下して上書き(overwrite)してしまいましょう。

さて、docker公式に従って、次の手順も実行していきましょう。

bash
$  echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

$ sudo apt-get update
Get:1 https://download.docker.com/linux/ubuntu focal InRelease [57.7 kB]                           
Hit:2 http://archive.ubuntu.com/ubuntu focal InRelease                                                  
Get:3 https://download.docker.com/linux/ubuntu focal/stable amd64 Packages [18.5 kB]
Hit:4 http://archive.ubuntu.com/ubuntu focal-updates InRelease                
Hit:5 http://security.ubuntu.com/ubuntu focal-security InRelease
Hit:6 http://archive.ubuntu.com/ubuntu focal-backports InRelease
Fetched 76.2 kB in 1s (69.7 kB/s)
Reading package lists... Done
Building dependency tree       
Reading state information... Done
2 packages can be upgraded. Run 'apt list --upgradable' to see them.

ここまででエラーがなければ大丈夫です。

というのも、DockerのGPG keyがうまく作成できていない場合、sudo apt updateに失敗してしまうためです。

念のため、Docker関連のパッケージをaptが認識できているかを確認します。

bash
$ sudo apt search docker-ce
Sorting... Done
Full Text Search... Done
docker-ce/focal 5:20.10.18~3-0~ubuntu-focal amd64 [upgradable from: 5:20.10.9~3-0~ubuntu-focal]
  Docker: the open-source application container engine

docker-ce-cli/focal 5:20.10.18~3-0~ubuntu-focal amd64 [upgradable from: 5:20.10.9~3-0~ubuntu-focal]
  Docker CLI: the open-source application container engine

docker-ce-rootless-extras/focal 5:20.10.18~3-0~ubuntu-focal amd64
  Rootless support for Docker.

docker-cedocker-ce-cliを認識できているので大丈夫ですね。
このままapt installもできるはずです。

5. 感想

GPG keyが作成できない原因は、iptablesやfirewallの設定の関係で、curlの3 way handshakeに失敗するなどのエラーが発生していたたのようなのですが、その更に根本的な原因は、wslのバージョンが1だったことでした。

こんな古いマシン普段使わないから、まさかwslバージョンが1だとは思わなかった
いや~勉強になります()

6. 補足 (VPN接続中のapt updateエラー)

ちなみに、VPNに接続しているときは、apt updateした際に、また別のエラーが発生したので、参考までに掲載しておきます。

bash
$ sudo apt update
Err:1 http://archive.ubuntu.com/ubuntu focal InRelease                                                       
  Temporary failure resolving 'archive.ubuntu.com'
Err:2 http://security.ubuntu.com/ubuntu focal-security InRelease                                             
  Temporary failure resolving 'security.ubuntu.com'
Err:3 https://download.docker.com/linux/ubuntu focal InRelease                                               
  Temporary failure resolving 'download.docker.com'
Err:4 http://archive.ubuntu.com/ubuntu focal-updates InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Err:5 http://archive.ubuntu.com/ubuntu focal-backports InRelease
  Temporary failure resolving 'archive.ubuntu.com'
Reading package lists... Done        
Building dependency tree       
Reading state information... Done
2 packages can be upgraded. Run 'apt list --upgradable' to see them.
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal-updates/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://archive.ubuntu.com/ubuntu/dists/focal-backports/InRelease  Temporary failure resolving 'archive.ubuntu.com'
W: Failed to fetch http://security.ubuntu.com/ubuntu/dists/focal-security/InRelease  Temporary failure resolving 'security.ubuntu.com'
W: Failed to fetch https://download.docker.com/linux/ubuntu/dists/focal/InRelease  Temporary failure resolving 'download.docker.com'
W: Some index files failed to download. They have been ignored, or old ones used instead.

どうやら、VPNによってはapt updateを妨げるような設定がなされていることがある模様。

7. 参考資料

7-1. Docker公式

7-2. wslのバージョンアップデート方法

この方はDockerのインストールはできたものの、起動できなかったようです。

私たちはそもそもDockerをインストールできていないのですが、いずれの問題も、wslのバージョンを上げることで解消できました。

7-3. StackOverflowの記事(別の原因で本件と同じエラーが発生していた模様)

この方は、Windows PCのFirewallの設定が会社によって書き換えられていたらしい。
その結果、SSL証明書がwslやcurlの意図しているものと異なるものに置き換えられてしまい、本記事と同じエラーに遭遇していたとのこと。

wslのversionが2なのに同じエラーが発生している場合は、この方のような対処法を検討してもいいかもしれない。

7-4. 『3-2. 「仮想マシンプラットフォーム」の有効化』について

3-2. 「仮想マシンプラットフォーム」の有効化の方法は、この記事を参考にしました。

7-5. 「3-3. カーネル コンポーネントの更新」について

3-3. に記載したカーネルコンポーネントの更新方法は、以下の記事を頼りにしました。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?