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 ファイルに平文を置かなくて済む。
どんなときに使う?
- ローカル開発やステージングで、チームの
.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:
- secretsbash
docker compose up # app に DB_PASSWORD / API_KEY がそのままの名前で注入される- 値の解決には helmfile/vals をライブラリとして組み込んでいるので、vals 本体を別に入れる必要はない。
ref+で始まらない値はそのまま渡される。 - 1Password の
ref+op://はサービスアカウントトークン(OP_SERVICE_ACCOUNT_TOKEN)が必要。個人アカウントで使いたい場合は README にあるref+exec://op?...でopCLI を子プロセスとして呼ぶ方法(デスクトップアプリ連携やeval $(op signin)のセッションを流用できる)を使う。
注意点
- 注入されるのは環境変数なので、コンテナ内で
envを見れば値は見える。コンテナ内のプロセスやログに出さない配慮は別途必要。 - Compose の Provider Service(
provider.type)の仕組み自体は Compose 本体のドキュメント(docs/extension.md)にある。
出典
- 関連: @matsuu · 2026-07-20 (記事「docker compose up だけでシークレットを注入する docker-valsの紹介」)
- リポジトリ: github.com / 紹介記事: zenn.dev