👻

🔐【Docker】DOCKER_CONTENT_TRUST とは?

に公開

✅ はじめに

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 しようとしたが、Notary にメタデータが存在しない場合──

このとき DOCKER_CONTENT_TRUST=1 が有効だと、署名が確認できないためエラーになります。

🛠 実例:DOCKER_CONTENT_TRUST=0 を使った回避

例えば、ECR(Elastic Container Registry)にコンテナイメージを 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 を書いてる…」という方に、
その意味とリスク、適切な使い方が伝われば嬉しいです!

Discussion