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
すると以下のようなエラーになった。
$ 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. 対策
上記エラー解消までの手順は以下の通り。
- 現状確認
- 「仮想マシンプラットフォーム」の有効化
- カーネル コンポーネントの更新
- wslのバージョンを変更 (1→2)
2, 3が未実施の場合、以下のエラーが発生します。
- 仮想マシンプラットフォームが無効状態のとき (2未対応時)
> wsl --set-version Ubuntu-20.04 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮想化が有効になっていることを確認してください。
詳細については、https://aka.ms/wsl2-install を参照してください
- カーネル コンポーネントが未更新のとき (3未対応時)
> 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のバージョンを確認します。
PS C:\Users\Seiya_Sasaki> wsl -l -v
NAME STATE VERSION
* Ubuntu-20.04 Running 1
私のwslはversionが1でした。
※もし既にversionが2なのに、この問題が発生しているのであれば、エラーの原因は別にあると思いますので、他の記事をあたってください。
3-2. 「仮想マシンプラットフォーム」の有効化
※未実施の場合のみ、以下の▶マークをクリック!
ここをクリック
windows11の場合の「仮想マシンプラットフォーム」の有効化方法を記載しておきます。
まず、タスクバーにある、虫眼鏡アイコンクリック。
次に、出現したポップアップウィンドウ内の検索窓に「windowsの機能」と入力し、「windowsの機能の有効化または無効化」を選択。
「Windows の機能」と書かれたWindowが現れたら、下にスクロールしていくと「仮想マシン プラットフォーム」という項目があるので、チェックをつけましょう。
そして、OKボタンを押します。
もしかしたら、ここで再起動を促されるかもしれません。
3-3. カーネル コンポーネントの更新
※未実施の場合のみ、以下の▶マークをクリック!
ここをクリック
まず、powershell上に表示される、カーネルコンポーネント更新が未実施の場合の参照先(https://aka.ms/wsl2kernel)を開きましょう。
すると、以下のような画面に飛ぶので、
「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」と記載されたリンクをクリックしてwsl_update_x64.msi
をダウンロードします。
これを実行すると、カーネルコンポーネントが更新されます。
もしかしたら、この後再起動を促されるかもしれません。
3-4. wslのバージョンを変更 (1→2)
wslバージョンの変更は、windows powershellから行います。
以下のコマンドを実行していきましょう。
※Ubuntu-20.04
と書かれている部分は、自身のLinux Distribution名で置き換えてください。
> 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仮想マシンの中でコマンドを実行していきます。
$ 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公式に従って、次の手順も実行していきましょう。
$ 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
が認識できているかを確認します。
$ 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-ce
やdocker-ce-cli
を認識できているので大丈夫ですね。
このままapt installもできるはずです。
5. 感想
GPG keyが作成できない原因は、iptablesやfirewallの設定の関係で、curlの3 way handshakeに失敗するなどのエラーが発生していたたのようなのですが、その更に根本的な原因は、wslのバージョンが1だったことでした。
こんな古いマシン普段使わないから、まさかwslバージョンが1だとは思わなかった
いや~勉強になります()
6. 補足 (VPN接続中のapt updateエラー)
ちなみに、VPNに接続しているときは、apt update
した際に、また別のエラーが発生したので、参考までに掲載しておきます。
$ 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. に記載したカーネルコンポーネントの更新方法は、以下の記事を頼りにしました。