首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dockerode在docker容器中运行java代码

使用dockerode在docker容器中运行java代码
EN

Stack Overflow用户
提问于 2019-09-11 14:56:20
回答 1查看 429关注 0票数 0

我想将一些java代码作为字符串发送到API中,然后在docker容器中运行它并返回控制台输出,我已经成功地用Python完成了它,但是由于java首先需要编译然后运行,所以我不确定如何实现该语言。

目前使用python映像,但我不太熟悉java和im,不确定如何处理它。

我的环境是使用类型记录的节点和使用dockerode模块的im。

代码语言:javascript
复制
let container = await docker.createContainer({
   Image: 'python',
   Tty: true,
   Cmd: ['/bin/bash'],
   StdinOnce: true
});

我能够在运行python之后将字符串直接传递给容器,将其添加到Cmd中,但不确定如何将字符串传递到文件中,然后编译并运行它。

代码语言:javascript
复制
var options = {
   Cmd: ['python', '-c'],
   AttachStdout: true,
   AttachStderr: true,
};

options.Cmd.push(code);

let exec = await container.exec(options);

我只有一个监听器来捕获输出流,可以在以后使用。

代码语言:javascript
复制
stdout.on('data', (chunk: any) => {
   let data = chunk.toString('utf8').split(/\r?\n/).filter((str: string) => {return str.length});
   output = data;
})

任何关于使用哪个映像以及如何传递代码以获得输出的建议都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-13 06:33:48

根据您想要实现的目标,您可能希望在docker容器中编译代码,或者绑定、挂载或将文件推送到容器中。

此示例只需在容器中挂载(绑定)当前工作目录,并调用javac (或java)。生成的.class文件将出现在当前目录中(仅适用于终端位于主机上的系统)。然后可以使用java和类名重新运行相同的命令来执行它。

代码语言:javascript
复制
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)。我不知道这是否可以算是“发送字符串”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57891850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档