Docker ビルドユーザー設定ガイド
このドキュメントでは、MixSeek-Core の Docker イメージビルド時のユーザー設定方法を説明します。
概要
Docker イメージをビルドする際、コンテナ内で使用するユーザーアカウント(ユーザー名、UID、GID)をカスタマイズできます。デフォルトでは、macOS の GID 競合を回避し、クロスプラットフォームの一貫性を確保するために安全な値が使用されます。
デフォルト設定
設定不要でビルドできます:
make -C dockerfiles/dev build
デフォルト値:
ユーザー名:
mixseek_coreUID:
1000GID:
1000
これらの値は macOS、Linux、Windows で競合なく動作します。
環境変数
以下の環境変数で設定をカスタマイズできます:
変数 |
デフォルト |
説明 |
|---|---|---|
MIXSEEK_USERNAME |
mixseek_core |
コンテナユーザー名 |
MIXSEEK_UID |
1000 |
コンテナユーザー ID |
MIXSEEK_GID |
1000 |
コンテナグループ ID |
使用例
デフォルトでビルド(推奨)
cd /path/to/mixseek_core
make -C dockerfiles/dev build
結果: コンテナユーザー mixseek_core (UID 1000, GID 1000)
カスタムユーザー設定
export MIXSEEK_USERNAME=myuser
export MIXSEEK_UID=5000
export MIXSEEK_GID=5000
make -C dockerfiles/dev build
結果: コンテナユーザー myuser (UID 5000, GID 5000)
使用タイミング:
NFS マウント権限の一致
企業の LDAP/Active Directory 統合
特定のセキュリティ要件
ビルド前の設定確認
make -C dockerfiles/dev validate-build-args
出力例:
✅ ビルド引数が設定されました
MIXSEEK_USERNAME: mixseek_core
MIXSEEK_UID: 1000
MIXSEEK_GID: 1000
1回限りの上書き
MIXSEEK_USERNAME=tempuser MIXSEEK_UID=3000 MIXSEEK_GID=3000 make -C dockerfiles/dev build
CI環境専用イメージ
MixSeek-Coreには、GitHub Actions CIと同じ環境をローカルで再現できるCI専用の最小構成Dockerfileが用意されています:
# CI専用イメージのビルド
make -C dockerfiles/ci build
# または直接Docker buildを使用
docker build -f dockerfiles/ci/Dockerfile -t mixseek-core/ci:latest .
CI環境の特徴:
Python 3.13.9を明示的に固定(再現性確保)
Node.js、AI toolsなど開発環境専用の要素を排除
セキュリティ重視(最小パッケージ、setuidビット除去)
高速ビルド(不要なレイヤーなし)
GitHub Actions CI環境と完全に一致
ローカルでのCI検証
PR作成前にローカルでGitHub Actions CIと同じチェックを実行:
# コードリンティング
make -C dockerfiles/ci lint
# フォーマットチェック
make -C dockerfiles/ci format-check
# 型チェック
make -C dockerfiles/ci type-check
# テスト実行(E2E除く)
make -C dockerfiles/ci test-fast
# すべてのチェック実行
make -C dockerfiles/ci check
詳細はdockerfiles/ci/README.mdを参照してください。
CI/CD パイプラインでの使用
GitHub Actions:
現在のCI設定(.github/workflows/ci.yml)では、以下のワークフローでCI Dockerコンテナを使用しています:
jobs:
build-ci-image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- uses: docker/setup-buildx-action@v3
- uses: docker/build-push-action@v6
with:
context: .
file: dockerfiles/ci/Dockerfile
tags: mixseek-core/ci:latest
cache-from: type=gha
cache-to: type=gha,mode=max
ruff:
needs: build-ci-image
steps:
- run: make -C dockerfiles/ci lint
- run: make -C dockerfiles/ci format-check
mypy:
needs: build-ci-image
steps:
- run: make -C dockerfiles/ci type-check
pytest:
needs: build-ci-image
steps:
- run: make -C dockerfiles/ci test-fast
GitLab CI:
build:
variables:
MIXSEEK_USERNAME: ci_user
MIXSEEK_UID: 1100
MIXSEEK_GID: 1100
script:
- make -C dockerfiles/ci build
Jenkins:
environment {
MIXSEEK_USERNAME = 'ci_user'
MIXSEEK_UID = '1100'
MIXSEEK_GID = '1100'
}
stages {
stage('Build') {
steps {
sh 'make -C dockerfiles/ci build'
}
}
}
推奨値ガイドライン
ユーザー名形式(Docker が検証)
✅ 推奨:
mixseek_core,_app,user-123,myservice❌ 避けるべき:
123user(数字で開始),User(大文字),user@host(特殊文字),my user(スペース)
UID/GID 範囲(Docker が検証)
✅ 推奨: 1000-65533(一般ユーザー範囲)
⚠️ 非推奨: 0(root), 1-999(システムアカウント), 65534(nobody)
❌ 避けるべき: 非数値、負の数
注意: バリデーションは Makefile では実行されません。無効な値は Docker ビルド時にエラーとして報告されます。
トラブルシューティング
エラー: “GID ‘20’ already exists”
原因: macOS で古い設定がログインユーザーの GID(20)を使用していた。
解決策:
unset MIXSEEK_USERNAME MIXSEEK_UID MIXSEEK_GID
make -C dockerfiles/dev build
エラー: “groupadd: invalid group ID ‘abc’” または “useradd: invalid user ID ‘xyz’”
原因: UID または GID に非数値を設定した。
解決策:
# 現在の値を確認
echo "UID: $MIXSEEK_UID, GID: $MIXSEEK_GID"
# 正しい数値を設定
export MIXSEEK_UID=1000
export MIXSEEK_GID=1000
make -C dockerfiles/dev build
エラー: “useradd: invalid user name”
原因: ユーザー名に無効な文字が含まれているか、数字で始まっている。
解決策:
# 有効な例:
export MIXSEEK_USERNAME="user123" # ✅
export MIXSEEK_USERNAME="_app" # ✅
export MIXSEEK_USERNAME="my-service" # ✅
make -C dockerfiles/dev build
問題: コンテナでのファイル権限エラー
症状: コンテナによって作成されたファイルがホスト上で間違った所有権を持つ。
原因: ホストとコンテナ間の UID/GID ミスマッチ。
解決策:
# オプション 1: デフォルトを使用(ほとんどの場合に推奨)
make -C dockerfiles/dev build
# オプション 2: ホストの UID/GID に一致させる(ボリュームマウント用)
export MIXSEEK_UID=$(id -u)
export MIXSEEK_GID=$(id -g)
make -C dockerfiles/dev build
注意: macOS では、GID が 20 の場合、オプション 2 は失敗する可能性があります。代わりにオプション 1 を使用してください。
プラットフォーム固有のメモ
macOS
デフォルト GID: 20(staff グループ)- Linux コンテナと競合
解決策: システムはデフォルトで GID 1000(全プラットフォームで安全)
ボリュームマウント: Docker Desktop が自動的に UID/GID マッピングを処理
推奨: デフォルト設定を使用
Linux
デフォルト UID/GID: 1000(最初のユーザー)
整合性: デフォルトが Linux の慣習と一致
ボリュームマウント: 正しい権限のために正確な UID/GID 一致が必要
推奨: デフォルトを使用するか、ホストの UID/GID に一致させる
Windows(Docker Desktop)
UID/GID: Windows ホストでは適用不可
コンテナの動作: コンテナを Linux システムとして扱う
推奨: デフォルト設定を使用
CI/CD 環境
要件: エージェント間で一貫したビルド
推奨: パイプライン設定で明示的な値を設定
典型的な値: UID/GID 1100-1200(1000 との競合を回避)
高度な設定
永続的な設定(プロファイル設定)
シェルプロファイル(~/.bashrc、~/.zshrc、または ~/.bash_profile)に追加:
# MixSeek-Core Docker ビルド設定
export MIXSEEK_USERNAME=myuser
export MIXSEEK_UID=2000
export MIXSEEK_GID=2000
プロファイルをリロード:
source ~/.bashrc # または ~/.zshrc
プロジェクト固有の設定(.env ファイル)
プロジェクトルートに .env ファイルを作成:
# .env
MIXSEEK_USERNAME=project_user
MIXSEEK_UID=3000
MIXSEEK_GID=3000
ビルド前にロード:
source .env
make -C dockerfiles/dev build
複数環境のサポート
環境固有のファイルを作成:
# .env.dev
MIXSEEK_USERNAME=dev_user
MIXSEEK_UID=1000
MIXSEEK_GID=1000
# .env.prod
MIXSEEK_USERNAME=prod_user
MIXSEEK_UID=2000
MIXSEEK_GID=2000
必要に応じて使用:
# 開発環境
source .env.dev
make -C dockerfiles/dev build
# 本番環境
source .env.prod
make -C dockerfiles/prod build
ベストプラクティス
可能な限りデフォルトを使用: デフォルト値(mixseek_core、1000、1000)は全プラットフォームで動作
ビルド前に設定を確認:
make validate-build-argsを実行して使用される値を確認カスタム値を文書化: デフォルト以外の値を使用する場合、プロジェクト内で理由を文書化
CI/CD の一貫性: パイプライン設定ファイルで明示的な値を設定
システム範囲を回避: 1000 未満の UID/GID を使用しない(システムアカウント用に予約)
クロスプラットフォームでテスト: カスタム値を使用する場合、macOS と Linux の両方でテスト
エラーは早期に検出: 無効な値がある場合、Docker ビルドの早い段階でエラーが発生するため、エラーメッセージを注意深く読む
関連ドキュメント
技術詳細: 詳細は
/specs/004-modify-docker-user/を参照実装計画:
../specs/004-modify-docker-user/plan.mdデータモデル:
../specs/004-modify-docker-user/data-model.md
ヘルプ
問題が発生した場合:
設定値を確認:
make validate-build-argsDocker ビルドエラーメッセージを注意深く確認(具体的なガイダンスが含まれています)
Docker ログを確認:
docker logs <container-name>