🔐【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