テック技報最新号へ →
インフラ

docker-vals: docker compose up だけでシークレットストアの値をコンテナに注入する

Docker Compose の「Provider Service」機能を使うプラグイン docker-vals を入れると、compose.yaml に ref+awsssm://... のような参照を書くだけで、docker compose up 時に AWS SSM・Vault・1Password・GCP Secret Manager などから値を取り出して、依存するコンテナに環境変数として渡せる。.env ファイルに平文を置かなくて済む。

@matsuu · 投稿 2026-07-20
#infra#docker#compose#secrets#security

どんなときに使う?

  • ローカル開発やステージングで、チームの .env 共有をやめたい
  • AI エージェントが作業するリポジトリに平文のシークレットを置きたくない

手順

前提: rawsetenv に対応した Docker Compose v5.2.0 以降(Docker Desktop なら 4.81.0 以降に同梱)。

yaml
# compose.yaml
services:
  secrets:
    provider:
      type: vals
      options:
        env:
          - "DB_PASSWORD=ref+awsssm:///app-dev/db_password"
          - "API_KEY=ref+vault://secret/data/app#/api_key"

  app:
    image: myapp
    depends_on:
      - secrets
bash
docker compose up   # app に DB_PASSWORD / API_KEY がそのままの名前で注入される
  • 値の解決には helmfile/vals をライブラリとして組み込んでいるので、vals 本体を別に入れる必要はない。ref+ で始まらない値はそのまま渡される。
  • 1Password の ref+op:// はサービスアカウントトークン(OP_SERVICE_ACCOUNT_TOKEN)が必要。個人アカウントで使いたい場合は README にある ref+exec://op?... で op CLI を子プロセスとして呼ぶ方法(デスクトップアプリ連携や eval $(op signin) のセッションを流用できる)を使う。

注意点

  • 注入されるのは環境変数なので、コンテナ内で env を見れば値は見える。コンテナ内のプロセスやログに出さない配慮は別途必要。
  • Compose の Provider Service(provider.type)の仕組み自体は Compose 本体のドキュメント(docs/extension.md)にある。

出典

X の元の投稿を開く