ローカル環境でシークレットを管理できる docker pass コマンド

📘 はてブ数 47 🕒 ブックマーク 2026-08-14 22:22 (UTC) 🏷️ タグ あとで読む

🔗 元記事: kakakakakku blog — ローカル環境でシークレットを管理できる docker pass コマンド
🔖 はてなブックマーク: b.hatena.ne.jp/ao41 — このブックマーク

記事の概要

kakakakakku blog(カック氏)の2026-08-13公開記事。docker pass コマンドを使うとローカル環境でシークレットを管理できる、という新機能の紹介・検証記事。macOSだとデフォルトで「キーチェーン」にシークレットが保存され、DockerコンテナやDocker Composeに se:// というスキームでシークレットの参照を渡せるようになる。.env ファイルを使わなくて良くなる!?という目新しいトピックを、実際にコマンドを叩いて確認するスタイルで解説している。

検証環境

Docker Desktopなら docker pass コマンドは同梱されていてセットアップ不要。Docker CEの場合は docker-secrets-enginedocker-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 pluginsSecrets Engine のプラグインを管理する
docker pass rmシークレットを削除する
docker pass runse:// 参照を渡して任意のコマンドを実行する
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)

まとめ