うちのUbuntu 22.04で使用しているDokcer 20.10.21でpullが可能になるようにプロキシ設定したときのメモです。
極力インターネットには接続しないサーバーですので、コンテナでのプロキシ設定は不要。ということで~/.docker/config.jsonの設定はせずに、サービス起動時のパラメーター設定で/etc/systemd/system/docker.service.d/override.confの作成が主となります。こちらの記事を参考にoverride.confの内容は以下のような感じ。
[Service]
Environment = "http_proxy=http://192.168.0.1:8080" "https_proxy=http://192.168.0.1:8080"
ファイルの作成は
# systemctl edit docker
を実行して該当ファイルの編集をしますが、冒頭にある
### Anything between here and the comment below will become the new contents of the file
のすぐ下に追記しないと設定が反映されません。最初、ファイルの中ほどにあるコメントアウトされた
# [Service]
付近に追加して保存終了しても、そもそも/etc/systemd/system/以下にdocker.service.dディレクトリさえ存在しない状況です。コメントをよく見てから中ほどのファイルは別のファイルを示していることに気づきました。systemdもなかなかトリッキーなことをします。正しい位置に設定を挿入して保存すると自動的にdocker.service.dディレクトリとoverride.confファイルが作成されます。編集後、設定を反映するために
# systemctl daemon-reload
を実行。これでDockerサービスを再起動してpullが可能に、と思いきや、うちの環境ではプロキシサーバーの独自証明書を使用して、プロキシでhttps接続の内容を監視していますのでそれ用の証明書の導入が必要です。それなしでdocker pullするとhttpsで以下のようなエラーとなりました。
Error response from daemon: Get "https://registry-1.docker.io/v2/": x509: certificate signed by unknown authority
このメッセージで検索しましてこちらのページから解決方法はUbuntuに署名証明書のcrtファイルを導入せよとのことです。
具体的には、/usr/local/share/ca-certificatesディレクトリ内に、crtファイルをコピーして、
# update-ca-certificates
を実行。すると/etc/ssl/certsにシンボリックリンクが張られて証明書が有効化されます。
これで今度こそ
# systemctl restart docker.service
を実行してDockerを再起動。めでたくdocker pullが可能となりました。