javascript - dockerode 命令式 cli 等效项

标签 javascript node.js docker dockerode

我正在尝试在我的 Node 应用程序的 dockerode 容器中编译并执行 java 程序。我可以通过首先使用基本 javascript 写入 tmp.java 文件,然后运行以下 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()
})      

但是,当我指定 VolumesWorkingDir 选项时,以及当我忽略这些选项,我收到错误:javac:找不到文件:tmp.java,我认为这意味着我的卷未正确安装。 本质上,我试图创建一个临时微容器,在容器中编译并运行我的java程序,然后销毁容器。因此,我无法在主机系统上本地安装 JDK 并编译程序,并且基本上只能在容器内工作。

我目前正在尝试使用命令式 Docker 命令来实现此用例,并且能够使用上面的 cli 命令来完成此操作,但是,我无法使用 dockerode 执行相同的操作 Node (无论是通过命令式命令还是使用 dockerfile)。

我真的很感谢任何帮助!

最佳答案

问题是您的目录未映射。

此选项对象相当于选项--rm -v $PWD:/app -w/app

  {
    HostConfig: {
      AutoRemove: true,
      Binds: [
          `${process.cwd()}:/app`
      ]
    },
    WorkingDir: '/app'
  }
  • 自动删除:true--rm
  • 绑定(bind):[ `${process.cwd()}:/app` ]-v $PWD:/app,带有 process.cwd ()$PWD
  • WorkingDir:'/app'-w/app

我还必须更改参数的顺序,因为我收到 TypeError: dest.on is not a function。运行 dockerode@3.1.0 时,我必须将输出流设置为第三个参数,将选项对象设置为第四个参数。

所以完整的命令如下所示:

docker.run(
  'java:8',
  ['javac', 'tmp.java'],
  process.stdout,
  {
    HostConfig: {
      AutoRemove: true,
      Binds: [
          `${process.cwd()}:/app`
      ]
    },
    WorkingDir: '/app'
  }
)

关于javascript - dockerode 命令式 cli 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60628363/

相关文章:

node.js - Wit.ai 特征 - 自由文本 - 关键字和意图/实体之间的差异

mongodb - 连接到在docker中执行shell后mongo断开连接

python - 为什么这个容器不能正常运行?

javascript - 从 grunt 模板访问流程/环境

javascript - 如何在 Mongoose Schema 中的嵌套对象中需要元素

javascript - 调试从 jQuery 调用的 PHP 脚本

javascript - nodeJS : Promise executing before for loop finishes, 回调栈

node.js - 亚马逊云,存储 Assets

javascript - 在 Google Apps 脚本中的多行上写入单个值

git - 无法 ssh 到另一个 Docker 容器 docker-compose