语法
选项
参数
前置条件
必须先创建开发环境:lager exec 所使用的 Docker 镜像、挂载目录和 shell。
命令参考
运行内联命令
保存命令以便复用
运行已保存的命令
追加额外参数
--。否则,如果某个参数与
lager exec 自己的选项同名(例如 --verbose),它会被 lager exec 自己吃掉。
传递环境变量
--passenv 把您 shell 中的值复制到容器里。请不要传 PATH:宿主机的值会替换镜像的 PATH,容器随后就找不到自己的工具了。
在 CI 中运行
lager exec 在启动容器之前会先读取 CI 环境变量。在下列 CI 系统的作业中,它会就地运行命令,不启动容器:
这些系统上的作业通常已经运行在 devenv 镜像中。但这些变量标识的是 CI 系统,而不是容器,所以 CLI 还会检查当前进程是否真的处于容器内。它会查看
/.dockerenv、/run/.containerenv、container 环境变量,以及 1 号进程的 cgroup 中是否出现容器运行时。
只有两者都成立时,命令才会就地运行。没有 container: 块的 GitHub Actions 或 GitLab CI 作业直接运行在运行器上,因此 CLI 会在那里启动容器,并打印一行说明。
就地运行时,命令的行为如下:
- shell 取自
.lager中 DEVENV 的shell,否则为/bin/bash。 - 命令在当前目录运行,
mount_dir不生效。 - 命令获得作业的环境变量,外加
.lager中的environment和每个--env。--passenv不起作用,因为作业环境本来就已存在。 - 命令的退出码就是
lager exec的退出码。 --mount、--volume、--user和--group不起作用。如果您传入其中任何一个, CLI 会打印一行警告,例如Warning: --mount, --volume ignored: the command runs in the current container, so there is nothing to start.--interactive和--tty不起作用。
自行选择运行方式
LAGER_EXEC_IN_PLACE 可以覆盖这项检查。设为 1、true 或 yes 表示就地运行命令,设为 0、false 或 no 表示启动容器。其他取值会被忽略,CLI 回退到自己检测到的结果。
LAGER_EXEC_IN_PLACE 只影响 lager exec,不影响其他任何命令。设置它之后,Box 锁、锁的持有者和冲突等待时间都保持不变。
与其他命令的区别
已保存命令的管理
已保存的命令存放在您.lager 配置的 devenv 段中。请用 lager devenv 管理它们:
示例
说明
- 容器以
--rm创建,因此每条命令执行完后都会被移除 - 容器中的退出码会传递给 CLI
- 您 shell 中每一个
LAGER*环境变量都会被传入容器 - 源代码从您的本地文件系统挂载到容器中
- 存在
~/.lager时,Lager 配置也会挂载到容器中 COMMAND参数和--command选项互斥,只能用其中一个

