| name | AppleContainerSkill |
| description | Apple純正の `container` CLI(macOS 15+, Virtualization.frameworkベース)でDocker Compose相当の開発用コンテナ(MySQL, Redis等)を起動・管理する。`docker compose up` を実行しようとして `docker` が `container` にaliasされている環境や、Docker Desktopの代わりにApple containerを使いたい場面で使う。「apple containerで立ち上げて」「docker composeにあるやつをcontainerで」「container CLIで動かして」「Docker Desktopの代わりに」といった要望に対応する。 |
Apple container CLI 運用スキル
Apple純正の container CLI(Homebrew: brew install container)は軽量VMベースのLinuxコンテナランタイム。Docker Desktopの代替として使えるが、docker compose 完全互換ではない点に注意が必要。
前提確認
which container && container --version
container system status
status が running でなければ起動する:
container system start
環境によっては docker コマンドが shell alias で container に置き換えられていることがある(which docker で確認)。その場合 docker compose ... を打っても実際には container が呼ばれ、compose系サブコマンドは後述のプラグイン不在エラーになる。
Compose相当の起動(container-compose)
container 本体には compose サブコマンドは内蔵されていない。Homebrewの別パッケージ container-compose を使う。
brew install container-compose
container-compose --version
container compose ...(プラグイン形式)としては認識されないビルドがある。その場合は container-compose を直接呼ぶ。
container-compose -f compose.yaml --profile <profile-name> up -d
container-compose -f compose.yaml down
--profile は docker compose の profiles: と同じ意味(複数指定可)。
--env-file オプションはサポートされていない(Unknown option)。.env はカレントディレクトリにあれば自動で読まれる(docker composeと同じ挙動)。
up -d はネットワーク・named volumeも自動作成する(<project>_<volume-name> の命名規則。projectはディレクトリ名から自動決定、name: フィールドがcompose fileにあればそちらを優先)。
既知の制約: command: の折り畳みブロックスカラー(>)
command: >
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time-zone=Asia/Tokyo
このようなYAML折り畳みスカラーで書かれた command: を、container-compose はシェル単語分割せず1つの文字列引数としてそのままプロセスに渡すことがある(docker composeは複数引数に分割する)。結果、対象プロセス(例: mysqld)が最初の引数以降を丸ごと1つの値として解釈し起動失敗する。
mysqld: Character set 'utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time-zone=Asia/Tokyo
' is not a compiled character set
対処: compose fileがdocker compose用の共有資産(他開発者やCIも使う)である場合、command: の書式をApple container互換にするために書き換えるべきではない。該当サービスだけ container-compose を諦め、後述の container run で直接個別起動する。
個別コンテナの起動(container run)
command: 折り畳みブロック問題を回避する場合や、compose fileを使わず単発でコンテナを立てたい場合はこちら。
container run -d \
--name <container-name> \
--platform linux/amd64 \
--rosetta \
-e MYSQL_DATABASE="$DB_NAME" \
-e MYSQL_ROOT_PASSWORD="$DB_ROOTPASS" \
-e MYSQL_USER="$DB_USERNAME" \
-e MYSQL_PASSWORD="$DB_USERPASS" \
-p "${DB_PORT}:3306" \
-v <project>_dbdata:/var/lib/mysql \
mysql:8.0.28 \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time-zone=Asia/Tokyo
ポイント:
command: に相当する引数はシェルの通常の単語分割に任せてバラで渡す(クォートで1つの文字列に固めない)。これで折り畳みブロック問題を回避できる。
--platform linux/amd64 --rosetta — Apple Silicon(arm64ホスト)でamd64専用イメージ(例: 一部バージョンのmysql)を動かす場合に必須。--rosetta を付けないとRosetta変換なしでエミュレーションが走り起動失敗・激重になることがある。ネイティブarm64イメージ(例: redis:7-alpine)には不要。
-v <name>:<path> はnamed volumeとしてdocker run同様に使える。container-compose up -d で事前に作成されたvolume名(container volume ls で確認)をそのまま流用できる。
- ホスト側からの接続確認は通常のクライアントで良い(例:
mysql -h127.0.0.1 -P"$DB_PORT" ...)。
よく使うコマンド一覧
| 目的 | コマンド |
|---|
| システム起動 | container system start |
| システム状態確認 | container system status |
| 実行中コンテナ一覧 | container ls / container ls -a(停止中も含む) |
| ログ確認 | container logs <name> |
| 設定確認(ポート・環境変数・platform等) | container inspect <name> |
| 停止 | container stop <name> |
| 削除 | container rm <name> |
| named volume一覧 | container volume ls |
| compose相当起動 | container-compose -f <file> --profile <p> up -d |
| compose相当停止 | container-compose -f <file> down |
トラブルシュート
Plugins are unavailable. Start the container system services and retry → container system start を実行してから再試行。
Plugin 'container-compose' not found → container-compose は container compose サブコマンドとしてではなく独立バイナリとして動く場合がある。container-compose <subcommand> の形で直接呼ぶ。
- amd64イメージがクラッシュ/起動しない(arm64ホスト) →
--platform linux/amd64 --rosetta を明示的に付与しているか確認。
container-compose 経由で起動したサービスの1つだけが container run exited with status 1 → container logs <name> で実際のエラーを確認。command: の折り畳みブロック問題(上記)が典型例。