我正在尝试在我的节点应用程序的 dockerode 容器中编译和执行 java 程序。我可以通过首先tmp.java
使用基本的 javascript 写入文件然后运行以下 shell 命令来做到这一点:
docker run --rm -v $PWD:/app -w /app java:8 javac tmp.java
docker run --rm -v $PWD:/app -w /app java:8 java tmp
但是,我现在正尝试过渡到使用 dockerode 模块,并尝试按如下方式复制此功能(基于 dockerode github 上的示例):
docker.run(
'java:8',
['javac', 'tmp.java'],
{
Volumes: {
'/': {}
},
WorkingDir: '/'
},
process.stdout
)
.then(data => {
var output = data[0]
console.log('OUTPUT: ', output)
var container = data[1]
console.log(output.StatusCode)
return container.remove()
})
tmp.class
但是,当我指定Volumes
和选项时,这不会产生任何输出并且不会按预期生成WorkingDir
,当我省略这些选项时,我会收到错误消息:javac: file not found: tmp.java
我认为这意味着我的卷没有正确安装。本质上,我正在尝试创建一个临时微容器,在容器中编译并运行我的 java 程序,然后销毁容器。因此,我无法在我的主机系统上本地安装 JDK 和编译程序,并且必须基本上只在容器内工作。
我目前正在尝试使用命令式 Docker 命令来实现此用例,并且能够使用上面的 cli 命令来完成此操作,但是,我无法使用dockerode
for node 做同样的事情(无论是通过命令式命令还是使用 dockerfile) .
我真的很感激这方面的任何帮助!