Docker执行命令报错OCI Runtime Create Failed:lljvm-cc未找到求助
解决Docker容器中
lljvm-cc命令找不到的问题 你遇到的核心问题是非交互式Shell不会自动加载用户的环境配置文件——这就是为什么你在交互式bash里能正常运行lljvm-cc,但直接通过docker run执行命令或/bin/bash -c调用时就报错的原因。
快速解决方案(无需修改镜像)
方法1:使用lljvm-cc的绝对路径执行
首先在交互式容器里用which lljvm-cc找到命令的绝对路径:
root@6a70a2346951:/c_files# which lljvm-cc # 假设输出是 /usr/local/bin/lljvm-cc
然后把命令改成用绝对路径执行:
docker run -v /home/sven/git/cerberos/CerberOS/uJ/services/c/:/c_files -w /c_files -it lljvm_work /usr/local/bin/lljvm-cc test_c_srv.c -l_c_support -o test_c_srv -g3
方法2:显式加载环境配置文件后执行
如果lljvm-cc的路径是在~/.bashrc或/etc/profile这类配置文件里添加的,你可以在命令里先加载配置再执行:
docker run -v /home/sven/git/cerberos/CerberOS/uJ/services/c/:/c_files -w /c_files -it lljvm_work /bin/bash -c 'source ~/.bashrc && lljvm-cc test_c_srv.c -l_c_support -o test_c_srv -g3'
长期解决方案(修改镜像)
如果你有权限修改lljvm_work镜像的Dockerfile,可以把lljvm-cc所在目录加到系统全局PATH中,这样不管是交互式还是非交互式Shell都能直接调用:
# 在Dockerfile中添加这一行(替换成实际的命令目录) ENV PATH="$PATH:/usr/local/bin"
然后重新构建镜像:
docker build -t lljvm_work .
为什么交互式Shell能正常运行?
当你用-it启动交互式bash时,bash会自动加载~/.bashrc、/etc/profile等环境配置文件,这些文件里可能包含了添加lljvm-cc路径到PATH的语句;而直接执行命令或用/bin/bash -c属于非交互式模式,bash默认不会加载这些配置,导致PATH中没有命令所在目录,自然找不到lljvm-cc。
内容的提问来源于stack exchange,提问作者Sven
相关产品推荐
相关产品推荐

