✅ はじめに
Docker でイメージの push/pull を行う際、以下のようなエラーに遭遇したことはありませんか?
Error: remote trust data does not exist for docker image
こんな時、よく見かける解決法として
export DOCKER_CONTENT_TRUST=0 を実行すると解決したりします。
と疑問を持った方も多いのではないでしょうか。
Docker における Content Trust(DCT) の概要と、
それを制御する環境変数 DOCKER_CONTENT_TRUST の
仕組み・使い方・注意点について詳しく解説します。
🧠 DOCKER_CONTENT_TRUST とは?
DOCKER_CONTENT_TRUST(以下DCT)は、
Docker におけるイメージの「信頼性の保証(署名)」を有効・無効にする環境変数です。
Docker は Notary という仕組みを利用して、
イメージに署名をつけて 真正性(本物であること)や改ざん防止 を保証します。
設定値 | 挙動の意味 |
---|---|
DOCKER_CONTENT_TRUST=1(デフォルト) | pull/push 時に署名を必須にする(安全だが厳密) |
DOCKER_CONTENT_TRUST=0 | 署名なしでも pull/push 可能(柔軟だが検証なし) |
📦 署名が求められるシチュエーション
公開レジストリ(Docker Hub など)で、
署名が必要なイメージに対して pull しようとした場合を例に取ります。
署名付きで push しようとしたが、Notary にメタデータが存在しない場合
DCTが有効であれば、エラーになります。
🛠 実例:DOCKER_CONTENT_TRUST=0 を使った回避
例えばECR にコンテナイメージを push する場合、
署名不要で push したいケースがあります。
export DOCKER_CONTENT_TRUST=0
docker build -t my-ecr-repo:latest .
docker push my-ecr-repo:latest
CI/CD や開発環境などでは、
毎回署名を付けずに push したい場合に有効です!
⚠️ セキュリティ上の注意点
DOCKER_CONTENT_TRUST=0 を使うことで、
署名チェックが完全に無効化されるため、以下のリスクがあります。
リスク | 内容 |
---|---|
改ざんの検知不可 | pull したイメージが改ざんされていても検出できない |
なりすましや供給元の不明確 | 誰が作成したイメージか確認できない |
セキュリティポリシー違反 | 企業によっては署名必須のポリシーがあることも |
✅ ベストプラクティス
シーン | 推奨設定 |
---|---|
本番環境の pull | DOCKER_CONTENT_TRUST=1 を使用 |
ローカル開発・CI/CD | DOCKER_CONTENT_TRUST=0 を一時的に使用 |
👩💻 CI/CD での利用例(GitHub Actions)
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Build and Push Docker Image without signing
run: |
export DOCKER_CONTENT_TRUST=0
docker build -t ${{ secrets.ECR_URI }}:latest .
docker push ${{ secrets.ECR_URI }}:latest
📝 まとめ
- DOCKER_CONTENT_TRUST は Docker の署名チェックを有効/無効にする環境変数
- 「=0」 にすると柔軟に push/pull できるが、セキュリティチェックを無効化するため注意
- 開発環境や CI/CD では有効だが、本番では署名チェックを有効にすべき
📚 参考リンク
- Docker公式ドキュメント - Content Trust
- Notary GitHub
🙌 最後に
「エラーが出たから仕方なく export DOCKER_CONTENT_TRUST=0 を書いてる…」という方に、
その意味とリスク、適切な使い方が伝われば嬉しいです!