代码沙箱中编译错误

最近在尝试做一个代码沙箱的服务,简单实现后,想要放在linux上交由docker管理,使用docker管理后就出现了问题,一直报编译错误

错误定位

最后通过日志,将错误定位到了执行编译命令的一行代码

String compileCmd = String.format("javac -encoding utf-8 %s", userCodeFile.getAbsoluteFile());

这个命令是我通过代码拼接的,就是编译用户项目的目录下的
class文件,由于Linux与windos的获取的user.dir不一样,导致找不到我们项目前期生成的代码文件,造成了编译错误(也就是文件位置错误)
成功后就没有具体去看是那个位置了,可以在下图沙箱编译部分中打印执行文件的路径,f分别在Windows和Linux下执行进行查看就可以知道,Windows和linux中获取到的路径了
在这里插入图片描述

解决

将项目的docker镜像放在登录用户的目录下
jar包以及Dockerfile文件位置

我就是直接放在了root目录下,然后重新运行,成功……

弄了很久,为了早点解决问题,在可能出现问题的地方都打上了日志
测试成功后

沙箱源码和Docker文件

沙箱源码
dockerfile:

# 基础镜像
FROM openjdk:8-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY code-sandbox-0.0.1-SNAPSHOT.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-有风无风皆自由-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值