enroot是否有等价于docker run的命令可执行Dockerfile中的CMD?
解决Enroot运行无Shell的Scratch镜像报错问题
- 问题原因:
enroot start默认会尝试启动交互式/bin/sh会话,但你基于scratch构建的镜像里没有shell,所以触发"找不到/bin/sh"的报错。 - 替代方案:用
enroot exec命令,它可以直接执行镜像内的指定程序,不需要启动shell,完全匹配你要的docker run直接执行CMD的需求:- 先导入squashfs镜像(如果还没完成导入):
enroot import squashfs://hello-world.squashfs - 直接执行镜像里的Hello World程序(假设程序路径是
/hello,对应Dockerfile里的CMD):enroot exec hello-world.squashfs /hello - 如果要模拟
docker run的默认行为(以root运行、运行后销毁容器),可以加上参数:enroot exec --root --rm hello-world.squashfs /hello
- 先导入squashfs镜像(如果还没完成导入):
- 注意事项:如果你的Dockerfile里CMD是shell格式(比如
CMD /hello),因为镜像无shell,必须改成数组格式(CMD ["/hello"]),或者在enroot exec里直接指定程序绝对路径。
内容的提问来源于stack exchange,提问作者irritable_phd_syndrome
相关产品推荐
相关产品推荐

