mise oci run
- 用法:
mise oci run [FLAGS] [-- CMD]… - 源代码:
src/cli/oci/run.rs
[实验性] 从当前 mise.toml 构建一个 OCI 镜像并在其中运行命令
等同于依次执行 mise oci build 和 docker run / podman run。 构建的镜像会被加载到本地容器引擎中(podman 原生拉取 OCI 布局; docker 则通过 docker load 接收),并在其中执行给定的命令,同时继承 stdin/stdout/stderr。
需要设置 mise settings experimental=true(或 MISE_EXPERIMENTAL=1),并且 需要以下程序之一:podman、docker。
参数
[-- CMD]… — 要在容器内运行的命令及参数(位于--之后)
选项
--engine <ENGINE>— 要使用的容器引擎(auto、podman或docker)可选值:
auto、podman、docker默认值:
auto--from <FROM>— 构建所用的基础镜像引用(使用 --image-dir 时忽略)--image-dir <IMAGE_DIR>— 使用已构建的 OCI 镜像布局,而不是重新构建--include-global— 同时包含全局 / 系统配置中的工具(默认为仅项目配置)详见
mise oci build --help。--keep— 运行后将加载的镜像保留在引擎的存储中默认情况下,命令退出时会同时删除容器(
--rm)和已加载的镜像,因此重复调用mise oci run不会在 podman / docker 存储中累积镜像。传入--keep可使用 mise 所采用的标签保留镜像(docker 使用mise-oci:run-*;podman 使用拉取的镜像 ID)。--mount-point <MOUNT_POINT>— 覆盖镜像内的挂载点(使用 --image-dir 时忽略)--no-mise— 不嵌入 mise 二进制文件(使用 --image-dir 时忽略)--owner <UID[:GID]>— 构建时为每个 tar 条目分配的 UID[:GID](与 --image-dir 冲突)覆盖 [oci].user_id / [oci].group_id。默认为 0:0。如果省略 GID,则默认为 UID。此选项仅影响文件所有权;[oci].user 控制镜像的 USER 指令。
--volume <HOST:CONTAINER>— 绑定挂载主机路径(可重复,HOST:CONTAINER[:MODE])注意:与
docker run -v不同,此处没有-v短选项,因为 mise 将-v保留给 --verbose。请使用--volume或--mount。-e --env <KEY=VAL>— 在容器中设置环境变量(可重复,KEY=VAL)-i --interactive— 以交互模式运行(向引擎传递-i)-t --tty— 分配 TTY(向引擎传递-t)-w --workdir <WORKDIR>— 容器内的工作目录-h --help— 输出帮助
示例:
构建当前 mise.toml 并进入 bash:
$ mise oci run -it -- bash
运行一个带环境变量 + 卷挂载的一次性命令(注意:`-v` 已保留
给 --verbose,所以请使用 `--volume`):
$ mise oci run -e DEBUG=1 --volume $PWD:/work -w /work -- npm test
复用之前构建的布局(跳过构建步骤):
$ mise oci build -o ./img && mise oci run --image-dir ./img -- node -e 'console.log(process.version)'引擎:
优先使用 podman(原生加载 OCI 布局)。回退到 docker
(通过 docker load 加载)。传入 --engine podman 或 --engine docker 可覆盖此设置。