44 lines
1.8 KiB
Rust
44 lines
1.8 KiB
Rust
//! Primitives de cycle de vie de container pour un [`DevContainer`] analysé.
|
|
//!
|
|
//! Cette crate pilote l'API du daemon de containers pour construire l'image
|
|
//! devcontainer, démarrer un container et y copier le workspace, exécuter les
|
|
//! hooks `postCreateCommand` / `postStartCommand` et lancer des commandes à
|
|
//! l'intérieur du container en cours d'exécution.
|
|
//!
|
|
//! Le daemon est joint par son **socket** (celui de l'hôte, monté dans le
|
|
//! container de Herald) : [`ContainerRuntime::connect`] suit `DOCKER_HOST` comme
|
|
//! le fait le CLI `docker`, et retombe sur le socket local. Aucun binaire de
|
|
//! runtime n'est donc requis dans l'image, et `podman` fonctionne de la même
|
|
//! façon dès lors qu'il expose son socket compatible Docker.
|
|
//!
|
|
//! # Isolation
|
|
//!
|
|
//! Chaque sandbox dispose de son propre tag d'image, de son propre container et de
|
|
//! son propre réseau. Le container démarre attaché à ce réseau afin que les hooks
|
|
//! `postCreateCommand` / `postStartCommand` puissent récupérer des dépendances
|
|
//! (par ex. `npm install`) ; une fois les hooks exécutés, le container est déconnecté
|
|
//! du réseau pour le reste de sa durée de vie. Chaque commande est bornée par un timeout.
|
|
//!
|
|
//! Les `runArgs` du `devcontainer.json` sont lus mais pas transmis au daemon : ils
|
|
//! viennent du dépôt, donc d'une pull request non fiable, et pourraient rattacher le
|
|
//! container à un autre réseau ou lui donner des privilèges qui annuleraient cette
|
|
//! isolation.
|
|
|
|
mod consts;
|
|
mod container;
|
|
mod context;
|
|
mod devcontainer;
|
|
mod errors;
|
|
mod exec;
|
|
mod path;
|
|
mod runtime;
|
|
mod schema;
|
|
|
|
pub use container::Container;
|
|
pub use devcontainer::DevContainer;
|
|
pub use errors::{ContainerError, ParseError};
|
|
pub use exec::ExecOutput;
|
|
pub use path::normalize;
|
|
pub use runtime::ContainerRuntime;
|
|
pub use schema::{DevContainerBuildSchema, DevContainerSchema, parse};
|