Docker中的Java Exec找不到二进制
Java exec in docker not finding binary
我有一个c 编译的二进制(我们称为cbin),我添加到docker映像并想要执行form java。
我尝试了Runtime.exec
的几乎所有参数:
Runtime.getRuntime().exec(new String[]{"/bin/sh", "cbin"});
Runtime.getRuntime().exec(new String[]{"bash", "-c", "cbin"});
Runtime.getRuntime().exec("cbin");
什么都没有用!
我的dockerfile:
FROM openjdk:8-jre-alpine
VOLUME ["/root/.config"]
RUN apk --no-cache add bash
ENV PATH="/app:$PATH"
WORKDIR /app
COPY cbin cbin
COPY ./entrypoint.sh /entrypoint.sh
ENTRYPOINT [ "/entrypoint.sh" ]
entrypoint.sh:
#!/usr/bin/env sh
set -e
JAVA_ARGS="-cp jar.jar ClassToRun"
chmod +x cbin
java ${JAVA_ARGS}
我尝试运行:
Runtime.getRuntime().exec("ls");
我在那里看到了该文件,但是我不断获得command not found
或IOException: no such file or directory error=2
等...
我缺少的一件事是,您不将jar复制到docker映像中。但是我想这是已发布的代码中缺少的东西,否则您会遇到一个错误:
错误:找不到或加载主类Classtorun
我刚刚从您的代码中创建了一个小罐子和docker映像,它仅处理:
Process process = Runtime.getRuntime().exec("cbin");
new Thread(() -> {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}).run();
process.waitFor();
我刚刚添加了代码以从二进制中获取stderr并从Java应用程序中打印出来以查看正在发生的事情。
您确定看到的错误消息来自Java Runtime.getRuntime().exec("cbin")
调用吗?而不是来自二进制本身?
如果您使用:
启动容器怎么办docker run -it --entrypoint bash <your-image-name>
,然后在容器中运行
$ cbin
这个有效吗?如果您在这里遇到相同的错误,则是cbin
的问题,而不是Java运行时的问题。
相关文章:
- 错误 C2679:二进制'<<':找不到采用类型 'overloaded-function' 的右侧操作数的运算符(或者没有可接受的转换)
- Ogre 3D共享库与CMAKE链接时,在Linux上执行二进制时找不到
- 类没有合适的复制构造函数,找不到二进制运算符 '=',
- 错误 C2679:二进制'>':找不到采用类型 'int' 的右侧操作数的运算符(或者没有可接受的转换)
- Docker中的Java Exec找不到二进制
- 错误 C2679:二进制"[":找不到采用右侧操作数的运算符
- Eclipse IDE for C/C++:找不到二进制文件,修复混乱
- 在自定义双链接列表中的自定义迭代器的取消运算符,找不到二进制操作员
- 错误的任何修复:二进制">>"找不到运算符
- 错误 C2678:二进制'==':找不到采用 'std::pair<const _Kty,_Ty>' 型左操作数的运算符
- C++ 编译器错误 C2679:二进制"=":找不到运算符
- 程序总是返回二进制'>>':找不到运算符,它采用错误类型的左操作数
- 错误 C2678:二进制'>':找不到采用左侧操作数的运算符
- 错误 C2678:二进制">>":找不到采用类型为"std::basic_istream<_Elem,_Traits>"的左操作数的运算符
- 错误 C2678:二进制">>":找不到采用类型为"std::stringstream "的左操作数的运算符
- 错误 C2679。错误 1 错误 C2679:二进制'<<':找不到采用类型 'std::vector<_Ty>' 的右侧操作数的运算符
- C++启动失败.找不到二进制文件
- 启动失败.找不到二进制文件.为什么
- 找不到二进制搜索代码错误
- "发射失败。找不到二进制文件。 CDT 开普勒日食上的错误