我想将一些java代码作为字符串发送到API中,然后在docker容器中运行它并返回控制台输出,我已经成功地用Python完成了它,但是由于java首先需要编译然后运行,所以我不确定如何实现该语言。
目前使用python映像,但我不太熟悉java和im,不确定如何处理它。
我的环境是使用类型记录的节点和使用dockerode模块的im。
let container = await docker.createContainer({
Image: 'python',
Tty: true,
Cmd: ['/bin/bash'],
StdinOnce: true
});我能够在运行python之后将字符串直接传递给容器,将其添加到Cmd中,但不确定如何将字符串传递到文件中,然后编译并运行它。
var options = {
Cmd: ['python', '-c'],
AttachStdout: true,
AttachStderr: true,
};
options.Cmd.push(code);
let exec = await container.exec(options);我只有一个监听器来捕获输出流,可以在以后使用。
stdout.on('data', (chunk: any) => {
let data = chunk.toString('utf8').split(/\r?\n/).filter((str: string) => {return str.length});
output = data;
})任何关于使用哪个映像以及如何传递代码以获得输出的建议都将不胜感激。
发布于 2020-03-13 06:33:48
根据您想要实现的目标,您可能希望在docker容器中编译代码,或者绑定、挂载或将文件推送到容器中。
此示例只需在容器中挂载(绑定)当前工作目录,并调用javac (或java)。生成的.class文件将出现在当前目录中(仅适用于终端位于主机上的系统)。然后可以使用java和类名重新运行相同的命令来执行它。
docker.run(
'java:8',
['javac', 'yourclass.java'],
process.stdout,
{
HostConfig: {
AutoRemove: true,
Binds: [
`${process.cwd()}:/app`
]
},
WorkingDir: '/app'
}
)您的问题是,您“希望将一些java代码作为字符串发送到API中”,但究竟什么才是“向API发送字符串”还不清楚。按照您使用Python所做的工作,您可以使用echo '${code}' > myclass.java,尽管您可能会遇到用引号转义的问题。
另一种方法是创建容器,然后创建container.putArchive('yourclass.java', options)。我不知道这是否可以算是“发送字符串”。
https://stackoverflow.com/questions/57891850
复制相似问题