THE MEDIA FOR AI THAT ACTUALLY HELPS.French edition · Understand & take action
The interface is in English. Use cases, skills and articles remain in French.
Docker

Décrire un environnement sbxenv.yaml pour Docker Sandboxes

docker-sandboxes-env

En bref

Le fichier `sbxenv.yaml` (schemaVersion « 1 », encore expérimental) décrit de façon déclarative un environnement Docker Sandboxes : agent, kits, montages, arguments, variables, secrets, registres, liaisons, serveurs MCP, ports et commandes d’hôte `lifecycle:`. On le pilote avec `sbx env create`, `run`, `plan`, `exec` ou `rm`, plutôt que par une longue ligne de drapeaux. Le fichier lu dans un répertoire s’appelle exactement `sbxenv.yaml` ; un `.sbxenv.yaml` au niveau du projet n’est pas pris pour le fichier du projet (ce nom caché ne sert que de couche de base dans le répertoire personnel, et seulement si aucun chemin n’est passé). Les champs obligatoires sont `schemaVersion: "1"` et `agent:` (un agent intégré, ou le nom d’un kit d’agent fourni via `kits:`) ; `agent: shell` suffit pour valider la mécanique sans identifiants. Les commandes `lifecycle:` s’exécutent sur l’hôte, avec les privilèges de l’utilisateur, pas dans le conteneur ; `initialize` doit être idempotente, car elle relance à chaque rattachement. On ne met jamais une valeur secrète littérale dans un fichier versionné : on passe par `ref:` ou `command:`. Pour un flux uniquement par drapeaux `sbx`, sans fichier d’environnement, on s’oriente vers `docker-sandboxes-lifecycle` ; pour une politique réseau ou des identifiants indépendants de ce fichier, vers `docker-sandboxes-network-credentials` ; pour le schéma `spec.yaml` d’un kit, vers `docker-sandboxes-kits`.

Ce que ça fait

  • Rédige et fusionne un ou plusieurs `sbxenv.yaml` (fusion profonde, style `docker compose -f`).
  • Planifie sans rien modifier avec `sbx env plan`, puis crée, rattache, exécute ou détruit l’environnement.
  • Déclare des commandes d’hôte (`initialize`, `postCreate`, `preRemove`) et le modèle d’approbation associé.
  • Paramètre un fichier partagé via `args:` et `--env-arg`, sans écrire de secret en clair dans le dépôt.
  • Signale le caractère expérimental du schéma version « 1 » et le repli vers les skills sœurs hors de ce fichier.

Pour qui, et un exemple

Les équipes qui veulent versionner un environnement de sandbox Docker dans le dépôt, pour qu’un onboarding ou un agent démarre toujours de la même façon, plutôt que de reconstruire la ligne de commande à chaque fois.

Exemple de demande : « Écris un sbxenv.yaml qui monte le répertoire du fichier, lance un agent shell, clone le dépôt au initialize s’il manque, et paramètre un argument d’environnement pour le nom du projet. »

À ouvrir pour rédiger, planifier ou exécuter un `sbxenv.yaml`, y compris pour en faire un onboarding reproductible, lancer un script d’hôte avant le démarrage de l’agent, ou comprendre pourquoi `sbx env create` redemande une approbation. Exemple rédigé par iadujour.fr à partir du SKILL.md, non testé.

Installer

Voir le README du dépôt docker/skills pour l’installation (collection officielle).

Niveau : Débutant

S’utilise en langage naturel ; aucun prérequis de code n’est exigé par la description, au-delà du produit visé.

À savoir

Dépôt officiel de l’organisation GitHub docker.

Extrait du SKILL.md

La description d’origine, celle que l’agent lit pour décider de charger la skill (en anglais) :

Use this skill when authoring, planning, or running a declarative `sbxenv.yaml` file for Docker Sandboxes (`sbx env create/run/plan/exec/rm`), even if the user just says they want to "check in a sandbox config", "make onboarding reproducible for a sandbox", "run a setup script before the agent starts", or "define arguments for a shared sandbox environment". Covers the sbxenv.yaml schema […]

Citée depuis le SKILL.md au commit cd22c4b . Le dossier contient aussi 6 fichiers annexes (agents/, assets/, checks/, references/).

Le SKILL.md compte 272 lignes et 16 sections principales :

  • Overview
  • When to use this skill
  • Do not use this skill when
  • Core guidance
  • File resolution and required fields
  • Naming, workspace, and the `.sbxenv.yaml` user base layer
  • `args:` — parameterizing a shared file
  • `lifecycle:` — host commands and the approval plan
  • The environment plan: what it is and is not
  • Secrets, registries, and bindings scoped to the environment
  • `kits:`, `additionalWorkspaces:`, `mcp:`, `ports:`, and `sandboxOptions:`
  • `sandboxOptions.writableEnvFiles` — a deliberate, explicit downgrade
  • Related skills
  • References
  • Assets
  • Checks

Licence : Apache 2.0

Vérifiée le 10 novembre 2026 sur : fichier LICENSE du dépôt . Licence déclarée dans le frontmatter : « Apache-2.0 ».

La licence autorise la reprise : le texte intégral du SKILL.md est reproduit ci-dessous, sans modification, avec sa mention de licence.

Texte intégral du SKILL.md

Reproduit sans modification depuis docker/skills (commit cd22c4b) , © Docker, sous licence Apache 2.0 (fichier de licence d’origine ).

Afficher le SKILL.md original (272 lignes, en anglais)
---
name: docker-sandboxes-env
description: Use this skill when authoring, planning, or running a declarative `sbxenv.yaml` file for Docker Sandboxes (`sbx env create/run/plan/exec/rm`), even if the user just says they want to "check in a sandbox config", "make onboarding reproducible for a sandbox", "run a setup script before the agent starts", or "define arguments for a shared sandbox environment". Covers the sbxenv.yaml schema (schemaVersion, agent, kits, workspace/additionalWorkspaces, args, env, secrets, registries, bindings, mcp, ports, sandboxOptions), host `lifecycle:` commands (initialize/postCreate/preRemove) and their approval-plan model, multi-file merge (`-f`-style deep merge and the user-level `.sbxenv.yaml` base layer), and file-write-protection (`sandboxOptions.writableEnvFiles`).
license: Apache-2.0
compatibility: Requires standalone sbx with sbx env support and sbxenv.yaml schemaVersion "1", not the legacy docker sandbox wrapper. Verified against docker/sandboxes df5c96ba60484fa2c375469dbac912c205da6c37; installed-help version and provenance are in references/sources.md. docker_help does not cover standalone sbx.
---

# Docker Sandboxes: Declarative sbxenv.yaml Environments

## Overview

`sbxenv.yaml` (schemaVersion `"1"`, EXPERIMENTAL) declaratively describes one
sandbox environment — agent, mixin kits, workspace mounts, environment
variables, secrets/registries/bindings to provision, MCP servers, ports, and
host-side lifecycle commands — so `sbx env create|run|plan|exec|rm` can stand
it up and tear it down reproducibly instead of a long flag invocation. This
skill owns that file format end to end. It delegates the sandbox lifecycle
semantics it wraps, the credential/network model it provisions into, and the
kit schema its `kits:` entries reference, to their own skills.

## When to use this skill

Activate this skill when:
- The user wants a checked-in, reproducible definition of a sandbox
  environment instead of a long `sbx create`/`sbx run` command line.
- The user wants host-side setup/teardown commands (cloning a repo, seeding
  fixtures, archiving state) tied to a sandbox's create/attach/remove
  lifecycle.
- The user wants to parameterize a shared environment file with named
  arguments (`args:` + `--env-arg`).
- The user is debugging why `sbx env create`/`run` is asking for approval,
  or why a file, kit, or secret it declares was skipped or flagged.

## Do not use this skill when

Do not use this skill when:
- The task is the underlying `sbx create`/`run`/`rm` flag-based workflow with
  no `sbxenv.yaml` file involved — use `docker-sandboxes-lifecycle`.
- The task is choosing network policy or storing a secret/registry
  credential independent of any environment file — use
  `docker-sandboxes-network-credentials` (this skill's `secrets:`/
  `registries:`/`bindings:` blocks provision into that same store, but do not
  redefine its rules here).
- The task is authoring the kit `spec.yaml` a `kits:` entry points at — use
  `docker-sandboxes-kits`.

## Core guidance

### File resolution and required fields

- The file `sbx env` reads from a directory is exactly `sbxenv.yaml` — no
  other name, and a directory-named `.sbxenv.yaml` at the project level is
  **not** read as a project's own file (only the home-directory base layer
  uses that hidden name; see below).
- Every environment file requires `schemaVersion: "1"` and `agent:` (a
  built-in agent name or the manifest name of an agent kit supplied via
  `kits:`). Everything else is optional. `agent: shell` needs no credentials
  and is the simplest way to validate a file's mechanics.
- `sbx env create|run|plan|exec|rm` accept one or more `PATH` arguments.
  Each `PATH` is either a directory (resolved to `<PATH>/sbxenv.yaml`) or the
  file itself. Passing more than one deep-merges them in declaration order —
  **`docker compose -f`-style semantics**: later files override earlier ones,
  mappings merge key-by-key, sequences concatenate.
  ```bash
  sbx env create sbxenv.yaml override.yaml
  ```

### Naming, workspace, and the `.sbxenv.yaml` user base layer

- Unless the file sets `name:` or `--name` overrides it, the sandbox is
  named after the mounted directory (or the project directory when nothing
  is mounted) — so an environment that mounts nothing is still the same
  sandbox every time it is applied. **Two different environment files in the
  same directory derive the same sandbox name and collide** unless each sets
  its own `name:` (or you pass a distinct `--name` per invocation) — always
  give each environment its own explicit `name:` when more than one may
  exist in the same directory.
- `workspace:` names the read/write mount, exactly like `sbx create`'s
  omitted-path behavior: **omitting `workspace:` mounts nothing** at all.
  A relative `workspace:` path resolves against the **directory of the file
  that declares it** — `workspace: .` mounts the directory the file sits
  in. `${{ env.projectDir }}` names the project directory (the one holding
  the first `PATH`, or cwd when none is named); `${{ env.fileDir }}` names
  the declaring file's own directory. Nothing else is expanded — a bare `$`
  is literal text, so a value written for the container
  (`PATH: $PATH:/opt/bin`) reaches it unchanged.
  ```yaml
  workspace: .                       # mounts the directory this file sits in
  # workspace: ${{ env.projectDir }} # mounts the project directory explicitly
  ```
- Relative kit sources follow the same file-directory anchoring rule as
  `workspace:` (see `docker-sandboxes-kits` for kit reference syntax).
- **Files within a mounted workspace get default read-only masking, and that
  protection is complete only when the file sits directly at the mount's own
  root.** A read-only bind at the mount point cannot be renamed by the
  sandbox — there is nothing above it inside the mount to rename. But an
  environment file in a **subdirectory** of a read-write mount is protected
  only at its current path: the sandbox can rename the containing directory
  (which it can write to) and then recreate the original path itself,
  landing a sandbox-controlled file back where the read-only bind no longer
  applies. `sbx env plan` calls this gap out explicitly for a file that is
  not at a mount's root. Do not claim renaming the containing directory
  creates no gap — for anything but the mount root, it does.
- With **no `PATH`** given, an `.sbxenv.yaml` in the **home directory** is
  merged underneath as a base layer for defaults shared across projects;
  naming any `PATH` skips this layer entirely. The base layer may not set
  `name:` (which identifies one project) and its `workspace:` must be rooted
  at `${{ env.projectDir }}` — any other value would mount one fixed
  directory under every project that merges it.

### `args:` — parameterizing a shared file

- Declare named inputs under `args:`, each with a `default` (making it
  optional, `default: ""` counts as a real default) or `required: true`
  (mutually exclusive), plus optional `description`, `enum`, or `pattern`.
- Reference one as `${{ env.args.NAME }}` anywhere a value appears in the
  file, and supply it with `--env-arg NAME=VALUE` (repeatable) or
  `--env-args-file PATH`.

### `lifecycle:` — host commands and the approval plan

- `lifecycle:` declares shell commands that run **on the host, outside the
  sandbox, with your own privileges** — not inside the container. Three
  phases, run in this order per invocation:
  - **`initialize`** — runs on **every** `create` **and** `run`, including
    one that only attaches to an existing sandbox. It is the one phase that
    can produce what the environment needs to exist (a cloned workspace, a
    generated file), so **it must be idempotent** — it reruns on every
    reattach.
  - **`postCreate`** — runs once, after the sandbox exists, before an
    interactive attach takes the terminal.
  - **`preRemove`** — runs before `sbx env rm` deletes the sandbox, while
    `sbx env exec` can still reach it. **A failing `preRemove` is only a
    warning** — the failure itself does not block removal. After the hook,
    removal rechecks the approved destroy plan and sandbox identity. A new
    credential or changed binding not covered by that approval, or a
    replacement sandbox under the same name, stops removal before deletion.
    Review the new destroy plan before retrying.
  - `sbx env exec` **runs no lifecycle commands at all, and requires the
    sandbox to already exist** — it does not create one. Run
    `sbx env create`/`sbx env run` first.
  ```yaml
  lifecycle:
    initialize:
      - command: test -d app || git clone https://github.com/acme/app
    postCreate:
      - command: ./scripts/seed-fixtures.sh
    preRemove:
      - command: ./scripts/archive-state.sh
  ```
- Every command runs through the shell from the **project directory** by
  default (override per-command with `workdir:`; bound its runtime with
  `timeout:`).
- **A file that declares any lifecycle command is asked about on every
  invocation that reaches it, whether or not this particular invocation
  changed anything** — approving a command also trusts whatever it invokes,
  including a script whose contents can change after the answer, so the
  question is repeated rather than remembered by default. The one exception:
  `sbx settings set env.rememberHostCommands true` makes it ask again only
  when the commands actually change. **Never treat an untrusted file's or an
  untrusted kit's lifecycle commands as pre-approved**, and never enable
  `rememberHostCommands` for a file whose commands you have not reviewed. An
  environment that declares **no** host commands at all, and whose config is
  otherwise unchanged from what was last approved, applies silently with no
  prompt. Use `--skip-host-commands` to run none of the declared commands
  for one invocation.

### The environment plan: what it is and is not

- `sbx env plan [PATH...]` prints everything applying the file would set up
  — host commands, credentials/bindings, MCP registrations, directories,
  published ports, the sandbox itself, and its variables — compared against
  what was last applied/approved. **It changes nothing.**
- `sbx env create`/`sbx env run` show the same plan and require approval
  before doing any work (`--auto-approve`/`-y` skips the prompt for
  non-interactive use — **never default to `-y` for a file or kit you have
  not reviewed**). A secret's literal `value:` is the one field shown both
  in the plan and recorded to state as a `sha256:` digest rather than in the
  clear; a `ref:`/`command:` secret shows where the credential comes from,
  not its resolved value.

### Secrets, registries, and bindings scoped to the environment

- `secrets:` and `registries:` provision into the **same credential store**
  `sbx secret set` uses, at this environment's **sandbox scope**, so
  `sbx env rm` can remove exactly what it created. Each entry uses the same
  `value`/`ref`/`command` shape as `sbx secret set` (exactly one of the
  three) — see `docker-sandboxes-network-credentials` for what those mean at
  runtime and why a literal secret value should not otherwise appear in a
  checked-in file.
- `bindings:` are per-service credential bindings merged into the user's
  **global** `credentials.yaml`; unlike `secrets:`/`registries:`, they are
  **left in place by default** by `sbx env rm` (they are user-wide and may
  be shared with other sandboxes/environments) — pass `--prune-bindings` to
  also remove them.
- **Never write a literal secret value directly into a checked-in
  `sbxenv.yaml`.** Use `ref:` (1Password/AWS Secrets Manager) or `command:`
  so the value never lives in the file at all; if a literal `value:` is used
  transiently, both the plan and state show only its digest, but the
  original environment file still contains the plaintext secret. See the labeled `secrets:` fragment below for the
  shape — it is intentionally not part of the minimal asset, which needs no
  credentials at all to validate.
  ```yaml
  # OPTIONAL fragment — add only if this environment actually needs a
  # credential; the minimal asset omits this entirely.
  secrets:
    anthropic:
      ref: op://Private/Anthropic/api-key   # never a literal `value:` in a checked-in file
      refresh: 55m
  ```

### `kits:`, `additionalWorkspaces:`, `mcp:`, `ports:`, and `sandboxOptions:`

- `kits:` composes mixin kits (and, exactly once, an agent kit whose name
  matches `agent:`) onto the base agent; a relative source anchors to the
  **declaring file's own directory**, the same rule as `workspace:`.
- `additionalWorkspaces:` mounts extra directories beyond the primary
  `workspace:` (a file cannot declare one without the other) — the
  `sbxenv.yaml` equivalent of `sbx run`'s extra positional workspace
  arguments with `:ro`.
- `mcp.servers:` registers MCP servers on the host and adds them to the
  sandbox's fixed (static) MCP set at create time; registrations are
  host-global and **left in place** by `sbx env rm`.
- `ports:` pins explicit host-port bindings for container ports the
  sandbox exposes — the equivalent of `sbx ports --publish` — and is torn
  down automatically when `sbx env rm` deletes the sandbox.
- `sandboxOptions:` (beyond `writableEnvFiles`, below) maps onto the
  remaining `sbx create` flags: `template`, `memory`, `cpus`,
  `pullPolicy`, `profile`, `skills`.

See `references/env-schema-fields.md` for the exact field shapes, required
keys, and a YAML example for each of the five blocks above.

### `sandboxOptions.writableEnvFiles` — a deliberate, explicit downgrade

- By default, **every environment file mounted inside the workspace is
  read-only at its own path**, even though the rest of the mount is
  writable. This stops an agent editing the very file that decides what
  host lifecycle commands and secret-resolving commands run on your machine
  on the next invocation.
- Set `sandboxOptions.writableEnvFiles: true` only where an agent is
  deliberately meant to edit its own environment file. This is a real
  security downgrade — the plan then reports the file as writable — so
  treat it the same as any other explicit trust decision, not a default.
- **The protection is complete only at a mount's own root.** A file placed
  directly at the root of a read-write mount cannot be reached even by
  renaming, because the sandbox cannot rename the mount point itself. A file
  in a subdirectory of that mount is a different case: it is read-only at
  its current path, but the sandbox can rename the directory holding it
  (which it can write to) and recreate a file at the original path, ending
  up with a sandbox-controlled file there. `sbx env plan` flags this gap for
  a file that is not directly at a mount's root — read the plan's output
  rather than assuming renaming is always harmless.

## Related skills

- For the `sbx create`/`run`/`rm` flag-based workflow this file wraps, use
  `docker-sandboxes-lifecycle`.
- For what `secrets:`/`registries:`/`bindings:` mean at runtime, and for
  configuring network policy independent of any environment file, use
  `docker-sandboxes-network-credentials`.
- For the schema of the kit `spec.yaml` a `kits:` entry (or `agent:`
  pointing at an agent kit) references, use `docker-sandboxes-kits`.

## References

- `references/sources.md` — provenance for every rule above (help captures, source paths, docs URLs).
- `references/env-schema-fields.md` — exact field shapes and YAML examples for `kits:`, `additionalWorkspaces:`, `mcp:`, `ports:`, and `sandboxOptions:`.

## Assets

- `assets/sbxenv.yaml` — a complete, minimal, safe example: a `shell` agent
  mounting the declaring file's own directory, one static env var, and no
  credentials at all — it validates and plans without any onboarding
  authentication.

## Checks

- `checks/verification.md` — Verification runbook for sbxenv.yaml commands (unexecuted runbook; run manually with an isolated, uniquely-named `--app-name`, never with real secret values or untrusted lifecycle commands auto-approved).
Source. Fiche rédigée par iadujour.fr à partir de : Frontmatter, sections et corps du SKILL.md, README du dépôt. Consultée le 10 novembre 2026. Dépôt : docker/skills .

Dans l’annuaire

Cas d’usage et guides qui partagent un thème, un métier ou un outil avec cette skill.

MÊME ÉDITEUR

Autres skills Docker : Données et bases de données

Toute la catégorie
DockerDonnées et bases de données

Configurer et déboguer Docker Compose

docker-compose-patterns

Fournit des règles pour créer, modifier ou diagnostiquer une configuration Docker Compose (compose.yaml ou compose.override.yaml) : services, contrôles de santé, ordre des dépendances, volumes, réseaux, variables d’environnement et surcharges de développement.

Outils : Non précisé par l’éditeurNiveau : Débutantmàj 29/09/2026
DockerDonnées et bases de données

Dockeriser un projet depuis zéro

docker-project-foundations

Guide la mise en place initiale d’un projet avec Docker : Dockerfile, compose.yaml et .dockerignore, en privilégiant des dépendances conteneurisées plutôt que des installations sur la machine hôte.

Outils : Non précisé par l’éditeurNiveau : Débutantmàj 29/09/2026
ÉCHANGES

Commentaires.

Un retour d’expérience, une question, une précision sur cette skill ? Les commentaires sont relus avant publication.

Commentaires publiés

Chargement des commentaires…

    Laisser un commentaire

    Charte de modération. Chaque commentaire est relu avant publication. Sont refusés : l’incitation à la haine, les propos injurieux ou discriminatoires, la publicité, le spam et les liens promotionnels, le hors-sujet et les données personnelles d’autrui.