{"slug": "apple-container-cli-skill-md", "title": "apple-container-cli-skill.md", "summary": "Apple Container の container CLI を安全に操作するための Skill が公開された。Docker CLI 互換を仮定せず、公式 command-reference に基づきビルド、実行、ログ、exec、copy、image、volume、network、registry、builder、machine、system を扱う。Docker Compose 風の依頼を単体コマンド列へ分解する際にも使用される。", "body_md": "| name | apple-container-cli |\n|---|---|\n| description | Apple Container の container CLI を Agent が安全に操作するための Skill。Docker CLI 互換だと仮定せず、公式 command-reference にある container サブコマンドを使い、ビルド、実行、ログ、exec、copy、image、volume、network、registry、builder、machine、system を扱う。Docker Compose 風の依頼を単体コマンド列へ分解するときにも使用する。 |\n\nApple Container の `container`\n\nCLI を使う作業では、この Skill に従う。\n\n`container`\n\nは Docker CLI ではない。\nDocker のコマンド名、Docker Engine API、Docker Compose の存在を仮定しない。\nOCI イメージを扱う点は共通しているが、操作では `container`\n\nのサブコマンドを直接選ぶ。\n\n- Apple Container でコンテナを起動する。\n- Apple Container でイメージをビルド、取得、保存、配布する。\n- Apple Container のログ、状態、ファイルコピー、exec、統計を扱う。\n- Apple Container の volume、network、registry、builder、machine、system を扱う。\n- Docker コマンドで依頼された作業を Apple Container のコマンドに読み替える。\n`docker-compose.yml`\n\nや`compose.yml`\n\nの内容を、Apple Container の単体コマンド列へ分解する。\n\n`docker`\n\nではなく`container`\n\nを使う。`docker compose`\n\nではなく、必要な`container build`\n\n、`container network`\n\n、`container volume`\n\n、`container run`\n\nに分解する。`container`\n\nのローカル実装を最終的な根拠にする。- 公式ドキュメントと実行環境が食い違う場合は、\n`container <command> --help`\n\nの結果を優先する。 - スクリプトでは短縮エイリアスより正式名を使う。\n- 取得や確認では、利用できる限り\n`--format json`\n\nを使う。 - 非対話の Agent 実行では、終了しないコマンドを避ける。\n- ホストを変更する操作は、変更範囲を説明してから実行する。\n\n作業前に、ローカル環境と Apple Container の状態を確認する。\n\n```\ncommand -v container\nsw_vers -productVersion\nuname -m\ncontainer system version --format json || container system version\ncontainer system status --format json || container system status\n```\n\n`container`\n\nが見つからない場合は、Docker で代替しない。\nApple Container が未導入であると報告し、インストールが必要だと伝える。\n\n`uname -m`\n\nが `arm64`\n\nでない場合は、Apple Silicon 前提を満たしていない可能性を報告する。\nそのまま Docker や別ランタイムへ切り替えない。\n\n`container system status`\n\nがサービス停止を示す場合は、ユーザーが初期化や起動を依頼しているときだけ次を実行する。\n\n```\ncontainer system start\n```\n\n`container system start`\n\nはホストのサービスを起動する。\n未確認のまま、診断のつもりで実行しない。\n\n次の場合は、実行前に help を見る。\n\n```\ncontainer --help\ncontainer run --help\ncontainer build --help\ncontainer image --help\ncontainer volume --help\ncontainer network --help\ncontainer machine --help\ncontainer system --help\n```\n\n- ドキュメントにあるはずのコマンドが失敗した。\n- ユーザーの環境が古い、または新しい可能性がある。\n`network`\n\n、`machine`\n\n、`system kernel`\n\nのように macOS やバージョンの影響を受けやすいコマンドを使う。- Docker Compose 風の依頼を Apple Container へ変換する。\n- 未確認のフラグを使いたくなった。\n\nhelp で存在を確認できないコマンドやフラグは使わない。\n\nAgent が自動実行するときは、次の規則に従う。\n\n- 長く動くサービスは\n`container run -d`\n\nで起動する。 - 一回だけ実行する処理は\n`container run --rm`\n\nを使う。 `container run -it`\n\nは、ユーザーが対話シェルを求めた場合だけ使う。`container exec -it`\n\nは、ユーザーが対話操作を求めた場合だけ使う。`container logs --follow`\n\nは、ユーザーが追跡表示を求めた場合だけ使う。`container stats`\n\nは、非対話では必ず`--no-stream`\n\nを付ける。`container machine run`\n\nをコマンドなしで実行しない。`container start --attach --interactive`\n\nは、対話を求められた場合だけ使う。- レジストリのパスワードはコマンドライン引数に置かず、\n`--password-stdin`\n\nを使う。\n\nログ確認では、既定で直近の行数を絞る。\n\n```\ncontainer logs -n 200 <container-id>\ncontainer logs --boot -n 200 <container-id>\n```\n\n統計確認では、一回だけ取得する。\n\n```\ncontainer stats --no-stream --format json <container-id>\n```\n\n次の操作は、実行前に対象と影響を示して確認する。\n\n`container delete --all`\n\n`container delete --force`\n\n`container prune`\n\n`container image delete --all`\n\n`container image prune --all`\n\n`container volume delete --all`\n\n`container volume prune`\n\n`container network delete --all`\n\n`container network prune`\n\n`container builder delete --force`\n\n`container machine delete`\n\n`container system stop`\n\n`container system dns create`\n\n`container system dns delete`\n\n`container system kernel set`\n\n名前で範囲を限定できる場合は、`--all`\n\nを使わない。\n`--force`\n\nは、通常停止や通常削除に失敗した場合だけ使う。\n\n| Docker での意図 | Apple Container で使うコマンド | 注意 |\n|---|---|---|\n`docker ps` |\n`container list` |\n既定では稼働中だけを表示する。 |\n`docker ps -a` |\n`container list --all` |\n停止済みも含める。 |\n`docker inspect <container>` |\n`container inspect <container>` |\nJSON 形式で出る。 |\n`docker images` |\n`container image list` |\nイメージ管理は `image` サブコマンド配下にある。 |\n`docker pull <image>` |\n`container image pull <image>` |\n`--platform` を必要に応じて付ける。 |\n`docker push <image>` |\n`container image push <image>` |\n事前に registry login を確認する。 |\n`docker build -t app .` |\n`container build -t app .` |\n`Dockerfile` がなければ `Containerfile` を探す。 |\n`docker run ...` |\n`container run ...` |\nDocker 専用フラグを混ぜない。 |\n`docker exec ...` |\n`container exec ...` |\n対象コンテナは稼働中である必要がある。 |\n`docker logs ...` |\n`container logs ...` |\n既定で全ログを出し得るため `-n` を使う。 |\n`docker cp ...` |\n`container copy ...` |\nスクリプトでは `copy` を使う。 |\n`docker stop ...` |\n`container stop ...` |\n`--time` と `--signal` を使える。 |\n`docker rm ...` |\n`container delete ...` |\nスクリプトでは `delete` を使う。 |\n`docker rmi ...` |\n`container image delete ...` |\n稼働中コンテナが参照するイメージは先にコンテナを処理する。 |\n`docker volume ls` |\n`container volume list` |\n永続 volume は `volume` サブコマンド配下にある。 |\n`docker network ls` |\n`container network list` |\n`network` は環境によって使えない場合がある。 |\n`docker login <registry>` |\n`container registry login <registry>` |\nパスワードは `--password-stdin` を使う。 |\n`docker save` |\n`container image save --output <file> <image>` |\n`--output` が必要である。 |\n`docker load -i <file>` |\n`container image load --input <file>` |\n`--input` が必要である。 |\n`docker stats --no-stream` |\n`container stats --no-stream` |\n非対話では `--no-stream` を必ず使う。 |\n`docker system df` |\n`container system df` |\nJSON 出力を使える。 |\n`docker compose ...` |\n直接対応なしとして扱う | ローカル help で確認できない限り `container compose` を使わない。 |\n\nApple Container の通常操作では、次のサブコマンドだけを候補にする。\n\n**Core**：`container run`\n\n、`container build`\n\n。\n\n**Container**：`container create`\n\n、`container start`\n\n、`container stop`\n\n、`container kill`\n\n、`container delete`\n\n、`container list`\n\n、`container exec`\n\n、`container export`\n\n、`container logs`\n\n、`container inspect`\n\n、`container stats`\n\n、`container copy`\n\n、`container prune`\n\n。\n\n**Image**：`container image list`\n\n、`container image pull`\n\n、`container image push`\n\n、`container image save`\n\n、`container image load`\n\n、`container image tag`\n\n、`container image delete`\n\n、`container image prune`\n\n、`container image inspect`\n\n。\n\n**Builder**：`container builder start`\n\n、`container builder status`\n\n、`container builder stop`\n\n、`container builder delete`\n\n。\n\n**Network**：`container network create`\n\n、`container network delete`\n\n、`container network prune`\n\n、`container network list`\n\n、`container network inspect`\n\n。\n\n**Volume**：`container volume create`\n\n、`container volume delete`\n\n、`container volume prune`\n\n、`container volume list`\n\n、`container volume inspect`\n\n。\n\n**Registry**：`container registry login`\n\n、`container registry logout`\n\n、`container registry list`\n\n。\n\n**Machine**：`container machine create`\n\n、`container machine run`\n\n、`container machine list`\n\n、`container machine inspect`\n\n、`container machine set`\n\n、`container machine set-default`\n\n、`container machine logs`\n\n、`container machine stop`\n\n、`container machine delete`\n\n。\n\n**System**：`container system start`\n\n、`container system stop`\n\n、`container system status`\n\n、`container system version`\n\n、`container system logs`\n\n、`container system df`\n\n、`container system dns create`\n\n、`container system dns delete`\n\n、`container system dns list`\n\n、`container system kernel set`\n\n、`container system property list`\n\n。\n\nエイリアスの `ls`\n\n、`rm`\n\n、`cp`\n\n、`m`\n\nは、手入力では使ってよい。\nAgent が保存する手順やスクリプトでは、正式名を使う。\n\n通常のビルドは次の形にする。\n\n```\ncontainer build --progress plain -t <image-name>:<tag> <context-dir>\n```\n\nDockerfile の位置を指定する場合は次の形にする。\n\n```\ncontainer build --progress plain -f <dockerfile-path> -t <image-name>:<tag> <context-dir>\n```\n\nビルド時引数は次の形にする。\n\n```\ncontainer build --progress plain --build-arg KEY=value -t <image-name>:<tag> <context-dir>\n```\n\nマルチステージの対象を指定する場合は次の形にする。\n\n```\ncontainer build --progress plain --target <stage> -t <image-name>:<tag> <context-dir>\n```\n\nDockerfile が指定されていない場合、`container build`\n\nは `Dockerfile`\n\nを優先し、見つからなければ `Containerfile`\n\nを使う。\nこの探索順に依存したくない場合は、`-f`\n\nで明示する。\n\n作業用コマンドは `--rm`\n\nを付ける。\n\n```\ncontainer run --rm <image> <command> <args>\n```\n\nホストの現在ディレクトリを読み書きする場合は、mount を明示する。\n\n```\ncontainer run --rm --mount type=bind,source=\"$PWD\",target=/workspace -w /workspace <image> sh -lc '<command>'\n```\n\n読み取り専用で足りる場合は、`readonly`\n\nを付ける。\n\n```\ncontainer run --rm --mount type=bind,source=\"$PWD\",target=/workspace,readonly -w /workspace <image> sh -lc '<command>'\n```\n\n環境変数は `-e`\n\nまたは `--env-file`\n\nで渡す。\n\n```\ncontainer run --rm -e NODE_ENV=test --env-file .env <image> <command>\n```\n\nサービスは `-d`\n\nと `--name`\n\nを使って起動する。\n\n```\ncontainer run -d --name <name> -p <host-port>:<container-port> <image>\n```\n\nポート公開の形式は次のどれかにする。\n\n```\n-p 8080:80\n-p 127.0.0.1:8080:80\n-p 8080:80/tcp\n```\n\n起動後は、一覧、ログ、inspect を確認する。\n\n```\ncontainer list --all --format json\ncontainer logs -n 200 <name>\ncontainer inspect <name>\n```\n\n停止と削除は分ける。\n\n```\ncontainer stop <name>\ncontainer delete <name>\n```\n\n通常は `container kill`\n\nより `container stop`\n\nを使う。\n`kill`\n\nは、graceful shutdown が失敗した場合だけ使う。\n\n非対話の exec は次の形にする。\n\n```\ncontainer exec <container-id> <command> <args>\n```\n\nシェルを介して複数コマンドを実行する場合は次の形にする。\n\n```\ncontainer exec <container-id> sh -lc '<command>'\n```\n\n対話シェルは、ユーザーが求めた場合だけ次の形にする。\n\n```\ncontainer exec -it <container-id> sh\n```\n\n`container exec`\n\nの対象は稼働中コンテナに限る。\n停止済みの場合は、`container start`\n\nを使うか、新しい `container run --rm`\n\nに切り替える。\n\n`container copy`\n\nは、ホストと稼働中コンテナの間で使う。\n片方は `container-id:path`\n\nの形式にする。\n\nホストからコンテナへコピーする。\n\n```\ncontainer copy ./config.json <container-id>:/etc/app/config.json\n```\n\nコンテナからホストへコピーする。\n\n```\ncontainer copy <container-id>:/var/log/app.log ./app.log\n```\n\n対象コンテナが停止している場合は、copy ではなく export が必要か確認する。\n\n`container export`\n\nは停止済みコンテナに使う。\n稼働中コンテナには使わない。\n\n```\ncontainer stop <container-id>\ncontainer export -o <output.tar> <container-id>\n```\n\n標準出力へ tar を出す場合は次の形にする。\n\n```\ncontainer export <container-id> > <output.tar>\n```\n\nイメージを取得する。\n\n```\ncontainer image pull <image>\n```\n\nプラットフォームを指定する。\n\n```\ncontainer image pull --platform linux/arm64 <image>\n```\n\nイメージにタグを付ける。\n\n```\ncontainer image tag <source> <target>\n```\n\nイメージを保存する。\n\n```\ncontainer image save --output <image.tar> <image>\n```\n\n保存したイメージを読み込む。\n\n```\ncontainer image load --input <image.tar>\n```\n\nレジストリへ push する前に、ログイン状態を確認する。\n\n```\ncontainer registry list --format json\n```\n\nログインは標準入力でパスワードを渡す。\n\n```\nprintf '%s' \"$REGISTRY_PASSWORD\" | container registry login --username \"$REGISTRY_USER\" --password-stdin <registry>\n```\n\n秘密情報をログに出さない。\n`set -x`\n\nが有効なシェルでログインコマンドを実行しない。\n\n名前付き volume を作る。\n\n```\ncontainer volume create <volume-name>\n```\n\nサイズを指定する。\n\n```\ncontainer volume create --opt size=10G <volume-name>\n```\n\nコンテナに接続する。\n\n```\ncontainer run -d --name <name> -v <volume-name>:<path-in-container> <image>\n```\n\nvolume の一覧と詳細を確認する。\n\n```\ncontainer volume list --format json\ncontainer volume inspect <volume-name>\n```\n\n匿名 volume は、`-v /path`\n\nや source なしの volume mount で作られる。\n匿名 volume は UUID 風の名前を持つ。\n匿名 volume は `--rm`\n\nで自動削除されない。\n使い捨てコンテナでも、不要になった匿名 volume は明示的に削除する。\n\nnetwork コマンドは環境依存である。 使う前に存在を確認する。\n\n```\ncontainer network --help\n```\n\nユーザー定義ネットワークを作る。\n\n```\ncontainer network create <network-name>\n```\n\nコンテナをネットワークに接続して起動する。\n\n```\ncontainer run -d --name <name> --network <network-name> <image>\n```\n\nネットワークの一覧と詳細を確認する。\n\n```\ncontainer network list --format json\ncontainer network inspect <network-name>\n```\n\nネットワーク削除は、そのネットワークを使うコンテナを停止し、削除してから実行する。\n\n```\ncontainer network delete <network-name>\n```\n\nビルドが失敗し、builder の状態が疑わしい場合は status を見る。\n\n```\ncontainer builder status --format json\n```\n\nbuilder を明示的に起動する場合は、必要な資源を指定する。\n\n```\ncontainer builder start --cpus 2 --memory 2048M\n```\n\nbuilder を停止する。\n\n```\ncontainer builder stop\n```\n\nbuilder の削除は、ビルド環境を作り直す意図がある場合だけ行う。\n\n```\ncontainer builder delete\n```\n\n`container machine`\n\nは、コンテナを動かすための machine を扱う。\n`m`\n\nエイリアスは使わず、正式名を書く。\n\nmachine 一覧を見る。\n\n```\ncontainer machine list --format json\n```\n\n既定の machine を inspect する。\n\n```\ncontainer machine inspect\n```\n\nmachine を作る。\n\n```\ncontainer machine create --name <machine-name> --cpus 4 --memory 8G --set-default alpine:3.22\n```\n\nmachine 内でコマンドを実行する。\n\n```\ncontainer machine run -n <machine-name> uname -a\n```\n\nコマンド引数が曖昧な場合は `--`\n\nを挟む。\n\n```\ncontainer machine run -n <machine-name> -- cat /proc/cpuinfo\n```\n\nコマンドなしの `container machine run`\n\nはログインシェルを開く。\n非対話の Agent 実行では使わない。\n\nmachine 設定を変える。\n\n```\ncontainer machine set -n <machine-name> cpus=4 memory=8G\n```\n\n設定変更は、machine の停止と再起動後に効く。 その場で効いたと仮定しない。\n\nsystem の状態を見る。\n\n```\ncontainer system status --format json\n```\n\nバージョンを見る。\n\n```\ncontainer system version --format json\n```\n\nサービスログを見る。\n\n```\ncontainer system logs --last 10m\n```\n\nディスク使用量を見る。\n\n```\ncontainer system df --format json\n```\n\nプロパティを見る。\n\n```\ncontainer system property list --format json\n```\n\nDNS ドメインの作成と削除には管理者権限が必要である。\nAgent は `sudo`\n\nを勝手に使わない。\nユーザーが明示的に許可した場合だけ実行する。\n\n```\nsudo container system dns create <domain-name>\nsudo container system dns delete <domain-name>\n```\n\nkernel の設定はホストの実行基盤に影響する。 ユーザーが明示的に要求した場合だけ実行する。\n\n```\ncontainer system kernel set --recommended\n```\n\n`docker-compose.yml`\n\n、`compose.yml`\n\n、`compose.yaml`\n\nがある場合でも、`container compose`\n\nを当然のように使わない。\nまずローカル help を確認する。\n\n```\ncontainer --help\n```\n\n`container compose`\n\nが help に出ない場合は、Compose ファイルを読み、Apple Container の単体コマンド列に分解する。\n\n分解は次の順に行う。\n\n- プロジェクト名を決める。\n`services`\n\nを列挙する。`build`\n\nがある service のイメージ名を決め、`container build`\n\nを作る。`volumes`\n\nの名前付き volume を`container volume create`\n\nで作る。`networks`\n\nのユーザー定義 network を`container network create`\n\nで作る。`depends_on`\n\nを起動順として扱う。- 各 service を\n`container run -d --name <project>-<service>`\n\nで起動する。 `ports`\n\n、`environment`\n\n、`env_file`\n\n、`volumes`\n\n、`command`\n\n、`entrypoint`\n\n、`cap_add`\n\n、`cap_drop`\n\nを対応する run フラグへ写す。- Apple Container の command-reference に直接対応がないキーは、実行前に警告して省略する。\n- 起動後に\n`container list --all --format json`\n\nと`container logs -n 200`\n\nで状態を確認する。\n\nCompose 風の主な対応は次の通りである。\n\n| Compose の項目 | Apple Container での扱い |\n|---|---|\n`services.<name>.image` |\n`container run <image>` に使う。 |\n`services.<name>.build` |\n先に `container build -t <project>-<service>:local <context>` を実行する。 |\n`services.<name>.dockerfile` |\n`container build -f <path>` に写す。 |\n`services.<name>.ports` |\n`container run -p <host>:<container>` に写す。 |\n`services.<name>.environment` |\n`container run -e KEY=value` に写す。 |\n`services.<name>.env_file` |\n`container run --env-file <file>` に写す。 |\n`services.<name>.volumes` |\n`container run -v` または `--mount` に写す。 |\n`services.<name>.command` |\nimage の後ろの arguments に置く。 |\n`services.<name>.entrypoint` |\n`container run --entrypoint <cmd>` に写す。 |\n`services.<name>.working_dir` |\n`container run -w <dir>` に写す。 |\n`services.<name>.user` |\n`container run -u <user>` に写す。 |\n`services.<name>.cap_add` |\n`container run --cap-add <cap>` に写す。 |\n`services.<name>.cap_drop` |\n`container run --cap-drop <cap>` に写す。 |\n`services.<name>.networks` |\n`container network create` と `container run --network <name>` に写す。 |\n`services.<name>.depends_on` |\n起動順としてだけ扱う。準備完了の保証とは扱わない。 |\n`services.<name>.restart` |\n直接対応なしとして警告する。 |\n`services.<name>.healthcheck` |\n直接対応なしとして警告する。必要なら別コマンドで確認する。 |\n`services.<name>.secrets` |\n汎用の runtime 対応なしとして警告する。 |\n`services.<name>.configs` |\n汎用の runtime 対応なしとして警告する。 |\n`services.<name>.deploy` |\nローカル単体実行では直接対応なしとして警告する。 |\n`services.<name>.profiles` |\n有効 profile を決めてから対象 service を選ぶ。 |\n`services.<name>.gpus` |\ncommand-reference に直接対応がなければ警告して省略する。 |\n`services.<name>.devices` |\ncommand-reference に直接対応がなければ警告して省略する。 |\n`services.<name>.privileged` |\ncommand-reference に直接対応がなければ警告して省略する。 |\n\n対応が不明なキーを、似た名前の Docker フラグに推測変換しない。 未対応項目は一覧にして、実行したコマンドとは分けて報告する。\n\nこの例は、Compose ファイルを読み替えるときの形を示す。 実際の service 名、ポート、volume、環境変数は、対象ファイルから取る。\n\n```\nset -euo pipefail\n\nPROJECT=myapp\n\ncontainer network create \"${PROJECT}-default\" || true\ncontainer volume create \"${PROJECT}-data\" || true\n\ncontainer build --progress plain -t \"${PROJECT}-web:local\" ./web\n\ncontainer run -d \\\n  --name \"${PROJECT}-db\" \\\n  --network \"${PROJECT}-default\" \\\n  -v \"${PROJECT}-data:/var/lib/app\" \\\n  -e APP_ENV=local \\\n  example-db:latest\n\ncontainer run -d \\\n  --name \"${PROJECT}-web\" \\\n  --network \"${PROJECT}-default\" \\\n  -p 8080:80 \\\n  -e DATABASE_HOST=\"${PROJECT}-db\" \\\n  \"${PROJECT}-web:local\"\n\ncontainer list --all --format json\ncontainer logs -n 200 \"${PROJECT}-web\"\n```\n\n`|| true`\n\nは、既存の network や volume を再利用する意図が明確な場合だけ使う。\n既存リソースの再利用が危険な場合は、先に inspect して中身を確認する。\n\nApple Silicon 上で amd64 イメージを扱う場合は、まず platform を明示する。\n\n```\ncontainer run --platform linux/amd64 <image> <command>\n```\n\nRosetta を使う必要がある場合だけ `--rosetta`\n\nを付ける。\n\n```\ncontainer run --platform linux/amd64 --rosetta <image> <command>\n```\n\n`--rosetta`\n\nは Apple Container 固有の実行条件に関わる。\n汎用 Docker フラグとして扱わない。\n\n**サービスへ接続できない**：まず system と container の状態を見る。\n\n```\ncontainer system status --format json\ncontainer list --all --format json\ncontainer logs -n 200 <container-id>\ncontainer inspect <container-id>\n```\n\n**API サーバーが応答しない**：system logs と version を見る。\n\n```\ncontainer system logs --last 10m\ncontainer system version --format json || container system version\n```\n\n**ビルドが止まる、または builder が怪しい**：builder の状態を見る。\n\n```\ncontainer builder status --format json\n```\n\n必要があれば builder を起動する。\n\n```\ncontainer builder start --cpus 2 --memory 2048M\n```\n\n**名前が衝突する**：既存コンテナを確認する。\n\n```\ncontainer list --all --format json\ncontainer inspect <name>\n```\n\n衝突した名前を削除する前に、ユーザーへ対象を示す。\n\n**ポートが使えない**：ホスト側の使用状況を確認する。\n\n```\nlsof -nP -iTCP:<host-port> -sTCP:LISTEN\n```\n\n別ポートを使うか、既存プロセスを止めるかはユーザーに確認する。\n\n**イメージ取得に失敗する**：レジストリ名、認証、platform を確認する。\n\n```\ncontainer registry list --format json\ncontainer image pull --platform <platform> <image>\n```\n\n**copy が失敗する**：対象コンテナが稼働中か確認する。\n\n```\ncontainer list --all --format json\n```\n\n停止済みコンテナから丸ごと取り出す必要がある場合は、`container export`\n\nを検討する。\n\n**volume が残る**：匿名 volume と参照状態を確認する。\n\n```\ncontainer volume list --format json\ncontainer system df --format json\n```\n\n匿名 volume は `--rm`\n\nで消えない。\n不要なら対象名を確認してから削除する。\n\n作業後は、次の情報を短く報告する。\n\n- 実行した主な\n`container`\n\nコマンド。 - 作成または変更したコンテナ、イメージ、volume、network、machine。\n- 公開したポート。\n- 稼働状態。\n- 省略した Compose 項目や未対応フラグ。\n- 後始末に使うコマンド。\n\n作業に失敗した場合は、失敗したコマンド、終了コード、関連ログ、次に試す最小の診断コマンドを示す。 Docker へ切り替えたかのように報告しない。\n\nユーザーへ提示するコマンドは、コピーして実行できる形にする。\n\nよい例は次の形である。\n\n```\ncontainer run -d --name web -p 8080:80 nginx:latest\ncontainer logs -n 200 web\n```\n\n避ける例は次の形である。\n\n```\ndocker run -d --name web -p 8080:80 nginx:latest\ncontainer compose up -d\ncontainer stats web\ncontainer logs -f web\n```\n\nDocker の例を出す必要がある場合は、比較表の左列だけに置く。 実行するコマンドとしては出さない。", "url": "https://wpnews.pro/news/apple-container-cli-skill-md", "canonical_source": "https://gist.github.com/sou1118/1be95c513f20dbe37b418d972017c61d", "published_at": "2026-06-28 09:54:05+00:00", "updated_at": "2026-06-28 10:33:30.926237+00:00", "lang": "en", "topics": ["developer-tools", "ai-agents"], "entities": ["Apple Container", "Docker", "Docker Compose", "OCI"], "alternates": {"html": "https://wpnews.pro/news/apple-container-cli-skill-md", "markdown": "https://wpnews.pro/news/apple-container-cli-skill-md.md", "text": "https://wpnews.pro/news/apple-container-cli-skill-md.txt", "jsonld": "https://wpnews.pro/news/apple-container-cli-skill-md.jsonld"}}