ローカル環境でシークレットを管理できる docker pass コマンド
🔗 元記事: kakakakakku blog — ローカル環境でシークレットを管理できる docker pass コマンド
🔖 はてなブックマーク: b.hatena.ne.jp/ao41 — このブックマーク
記事の概要
kakakakakku blog(カック氏)の2026-08-13公開記事。docker pass コマンドを使うとローカル環境でシークレットを管理できる、という新機能の紹介・検証記事。macOSだとデフォルトで「キーチェーン」にシークレットが保存され、DockerコンテナやDocker Composeに se:// というスキームでシークレットの参照を渡せるようになる。.env ファイルを使わなくて良くなる!?という目新しいトピックを、実際にコマンドを叩いて確認するスタイルで解説している。
検証環境
- macOS Tahoe
- Docker Desktop 4.85.0
Docker Desktopなら docker pass コマンドは同梱されていてセットアップ不要。Docker CEの場合は docker-secrets-engine と docker-secrets-engine-plugins パッケージのインストールが必要になる。
$ docker pass --help Docker Pass CLI - Manage your local secrets. Usage: docker pass set|get|ls|rm|run
docker pass の6種類のコマンド
| コマンド | 概要 |
|---|---|
docker pass get | シークレットを取得する |
docker pass ls | シークレットを一覧する |
docker pass plugins | Secrets Engine のプラグインを管理する |
docker pass rm | シークレットを削除する |
docker pass run | se:// 参照を渡して任意のコマンドを実行する |
docker pass set | シークレットを登録する |
シークレットの操作を試す
1. docker pass set — 登録
$ docker pass set MY_TEST_SECRET=my-test-secret
--metadata オプションで任意のメタデータも同時登録可能:
$ docker pass set MY_TEST_SECRET_WITH_METADATA=my-test-secret-with-metadata \ --metadata owner=alice \ --metadata expiry=2027-03-01
2. docker pass ls — 一覧
$ docker pass ls MY_TEST_SECRET MY_TEST_SECRET_WITH_METADATA
3. docker pass get — 取得
値は マスクされて表示される仕様(シークレット値を表示するオプションはなさそう)。「登録されていることの確認」用のコマンド:
$ docker pass get MY_TEST_SECRET ID: MY_TEST_SECRET Value: **********
4. docker pass run — se://参照でコマンド実行
$ MY_TEST_SECRET=se://MY_TEST_SECRET docker pass run -- sh -c 'echo "MY_TEST_SECRET: ${MY_TEST_SECRET}"'
MY_TEST_SECRET: my-test-secret
5. docker pass plugins — プラグイン管理
Secrets Engineプラグインの管理サブコマンド(enable / disable / ls など)。デフォルトのキーチェーン以外に 1Password(CLI/SDK)も選べる:
$ docker pass plugins ls NAME VERSION PATTERN STATUS CONFIGURABLE TYPE ○ 1password-cli v0.0.6 ** stopped (disabled) yes builtin ○ 1password-sdk v0.0.7 ** stopped (disabled) yes builtin ● docker-auth v0.1.1 docker/auth/** running no builtin ● docker-desktop-mcp-dcr vv0.0.1 docker/mcp/oauth-dcr/** running no builtin ● docker-desktop-mcp-oauth vv0.0.1 docker/mcp/oauth/** running no builtin ● docker-mcp-credential-helper v0.0.7 docker/mcp/** running no builtin ● docker-pass v0.2.1 ** running no builtin
6. docker pass rm — 削除
$ docker pass rm MY_TEST_SECRET RM: MY_TEST_SECRET
Docker コンテナ・Docker Compose との組み合わせ
docker run でシークレットを渡す
docker run の環境変数に se:// 参照を渡せばOK。コンテナ内で実際に環境変数が展開されることを確認:
$ docker pass set MY_TEST_SECRET=my-test-secret
$ docker run -e MY_TEST_SECRET=se://MY_TEST_SECRET -dt --name sandbox-docker-pass busybox
$ docker exec -it sandbox-docker-pass sh
/ # echo ${MY_TEST_SECRET}
my-test-secret
Docker Compose(PostgreSQL)での実例
compose.yml の環境変数に se:// 参照を直接書ける:
services:
postgres:
image: postgres:17-alpine@sha256:742f40ea20b9...
environment:
POSTGRES_PASSWORD: se://POSTGRES_PASSWORD
ports:
- 5432:5432
$ docker pass set POSTGRES_PASSWORD=my-postgres-password $ docker compose up -d $ PGPASSWORD=se://POSTGRES_PASSWORD docker pass run -- \ psql -h 127.0.0.1 -p 5432 -U postgres -c 'SELECT current_user' current_user -------------- postgres (1 row)
まとめ
- docker pass コマンドでローカルのシークレット管理が完結 — macOSのキーチェーンに保存され安全
se://スキームで docker run / docker compose / 任意コマンドに参照渡しができる- 1PasswordなどSecrets Engineプラグインへの差し替えも可能
- 著者の結論: 「お手軽に使えるし .env ファイルを使わずにシークレットを管理する選択肢の一つとして覚えておこう」