概要 通信ブロッキングツール(お仕事中にえっちなサイトとか見れなくするやつ)を導入済みのWindows PCのWSL(Debian)で、Dockerイメージのビルドを実行した際に、ホスト側のWindowsにインストールされたブロッキングツールの証明書を参照出来ないため、 cdn.amazonlinux.comとかのSSL証明書チェーンを信頼出来ないと怒られて、WSL上でのDockerビルドがブロックされてしまう、という問題が発生したので対処した時のメモ
エラー: ファイル内容(修正前) amazonlinuxにssm-agentを入れただけの単純なやつ
Dockerfile
1 2 3 4 5 6 7 8 FROM public.ecr.aws/amazonlinux/amazonlinux:2023 RUN yum update -y \ && yum install -y amazon-ssm-agent \ && yum clean all CMD ["tail", "-f", "/dev/null"] `
docker-compose.yml
1 2 3 4 5 6 services: amazonlinux-with-ssm-agent: image: amazonlinux-with-ssm-agent:latest build: context: .
エラー: ビルドログ(修正前) 以下のエラー
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 $ docker -v Docker version 28.5.1, build e180ab8 $ docker compose build [+] Building 5.2s (6/6) FINISHED => [internal] load local bake definitions 0.0s => => reading from stdin 591B 0.0s => [internal] load build definition from Dockerfile 0.1s => => transferring dockerfile: 341B 0.0s => [internal] load metadata for public.ecr.aws/amazonlinux/amazonlinux:2023 1.6s => [internal] load .dockerignore 0.1s => => transferring context: 2B 0.0s => CACHED [1/2] FROM public.ecr.aws/amazonlinux/amazonlinux:2023@sha256:f5ca6cafc706233c641ad838e738047389943afd3585cb1df7eedfc4d9b1799d 0.1s => => resolve public.ecr.aws/amazonlinux/amazonlinux:2023@sha256:f5ca6cafc706233c641ad838e738047389943afd3585cb1df7eedfc4d9b1799d 0.0s => ERROR [2/2] RUN yum update -y && yum install -y amazon-ssm-agent && yum clean all 3.1s ------ > [2/2] RUN yum update -y && yum install -y amazon-ssm-agent && yum clean all: 1.751 Amazon Linux 2023 repository 0.0 B/s | 0 B 00:01 1.752 Errors during downloading metadata for repository 'amazonlinux': 1.752 - Curl error (60): SSL peer certificate or SSH remote key was not OK for https://cdn.amazonlinux.com/al2023/core/mirrors/2023.9.20251117/x86_64/mirror.list?instance_id=none [SSL certificate problem: unable to get local issuer certificate] 1.752 Error: Failed to download metadata for repo 'amazonlinux': Cannot prepare internal mirrorlist: Curl error (60): SSL peer certificate or SSH remote key was not OK for https://cdn.amazonlinux.com/al2023/core/mirrors/2023.9.20251117/x86_64/mirror.list?instance_id=none [SSL certificate problem: unable to get local issuer certificate] 1.752 Ignoring repositories: amazonlinux 1.853 Dependencies resolved. 1.854 Nothing to do. 1.855 Complete! 2.956 Amazon Linux 2023 repository 0.0 B/s | 0 B 00:00 2.956 Errors during downloading metadata for repository 'amazonlinux': 2.956 - Curl error (60): SSL peer certificate or SSH remote key was not OK for https://cdn.amazonlinux.com/al2023/core/mirrors/2023.9.20251117/x86_64/mirror.list?instance_id=none [SSL certificate problem: unable to get local issuer certificate] 2.956 Error: Failed to download metadata for repo 'amazonlinux': Cannot prepare internal mirrorlist: Curl error (60): SSL peer certificate or SSH remote key was not OK for https://cdn.amazonlinux.com/al2023/core/mirrors/2023.9.20251117/x86_64/mirror.list?instance_id=none [SSL certificate problem: unable to get local issuer certificate] 2.957 Ignoring repositories: amazonlinux 2.958 No match for argument: amazon-ssm-agent 2.972 Error: Unable to find a match: amazon-ssm-agent ------ Dockerfile:7 -------------------- 6 | 7 | >>> RUN yum update -y \ 8 | >>> && yum install -y amazon-ssm-agent \ 9 | >>> && yum clean all 10 | -------------------- failed to solve: process "/bin/sh -c yum update -y && yum install -y amazon-ssm-agent && yum clean all" did not complete successfully: exit code: 1
どうしたらいいの? 証明書をDockerビルド時にだけ読み込ませてあげれば良いっぽいのだけど、他社のcrtはイメージに入れたくないし、ビルド時だけ読み込ませるにはどうしたらいいの?とAIに聞いたら、 BuildKitのシークレット機能を使って、ビルド時だけマウントすると良いよ とのこと
対処1: Windowsから証明書をエクスポートしてくる ブロッキングツールが発行してるルート証明書を、Windowsの証明書ストアからエクスポートしてきます。このへんはツールによるので端折りますが、ブラウザとかで証明書の発行者とか見たら、CAの名前が判明しました
対処2: docker-compose.ymlの修正 /usr/local/share/ca-certificates/の部分は、私がこのPathにcrtを置いてただけで任意です
1 2 3 4 5 6 7 8 9 10 11 12 services: amazonlinux-with-ssm-agent: image: amazonlinux-with-ssm-agent:latest build: context: . secrets: // 追加 - hoge_ca // 追加 // 追加 secrets: hoge_ca: file: /usr/local/share/ca-certificates/hoge.crt // [対処1]でエクスポートしてきた証明書(hoge.crt)
対処3: Dockerfileの修正 /etc/pki/ca-trust/source/anchors/の部分は、amazonlinux2023の場合のPathです
1 2 3 4 5 6 7 8 9 FROM public.ecr.aws/amazonlinux/amazonlinux:2023 RUN --mount=type=secret,id=hoge_ca,target=/etc/pki/ca-trust/source/anchors/hoge.crt \ update-ca-trust extract \ && yum update -y \ && yum install -y amazon-ssm-agent \ && yum clean all CMD ["tail", "-f", "/dev/null"]
対処4: ビルド
イメージ内に証明書が残っていないか確認
1 2 $ dc run --rm amazonlinux-with-ssm-agent ls -a /etc/pki/ca-trust/source/anchors/hoge.crt ls: cannot access '/etc/pki/ca-trust/source/anchors/hoge.crt': No such file or directory