如何添加`--health-cmd =' mysqladmin ping --silent'`和`--health-interval =' 1s'`选项到dockerode的createContainer()功能?

时间:2017-12-28 10:03:33

标签: node.js docker

我想使用node.js来操作docker容器。我找到了一个名为dockerode的模块,它看起来像我需要的工具。

但是,我还没有办法将--health-cmd--health-interval选项添加到createContainer功能。

docker run命令中使用了这两个选项。您可以通过docker run --help | grep health找到它们:

  

- health-cmd string要运行以检查运行状况的命令   --health-interval duration运行检查之间的时间(ms | s | m | h)(默认为0)

我已尝试过以下代码,但这2个选项在代码中无效。

const Docker = require('dockerode')
const docker = new Docker({socketPath: '/var/run/docker.sock'})

docker.createContainer({
Image: 'mysql:5.7',
name: 'myContainer',
env: ['MYSQL_ROOT_PASSWORD=mypassword'],
'health-cmd': 'mysqladmin ping --silent',
'health-interval': '1s',
HostConfig: {
    PortBindings: {
    '3306/tcp': [
        {
        HostPort: '3306'
        }
    ]
    }
}
}, (err, container) => {
if (err) {
    console.error(`create err:${err}`)
} else {
    container.start((err, data) => {
    if (err) {
        console.error(`start err: ${err}`)
    } else {
        console.log(`data: ${data}`)
    }
    })
}
})

1 个答案:

答案 0 :(得分:0)

感谢post的帮助。我找到了document of Docker Engine API,并找出了添加2个选项的正确方法:

const Docker = require('dockerode')
const docker = new Docker({socketPath: '/var/run/docker.sock'})

docker.createContainer({
  Image: 'mysql:5.7',
  name: 'myContainer',
  env: ['MYSQL_ROOT_PASSWORD=mypassword'],
  Healthcheck: {
    Test: ['CMD-SHELL', 'mysqladmin ping'],
    Interval: 1000000000
  },
  HostConfig: {
    PortBindings: {
      '3306/tcp': [
        {
          HostPort: '3306'
        }
      ]
    }
  }
}, (err, container) => {
  if (err) {
    console.error(`create err:${err}`)
  } else {
    container.start((err, data) => {
      if (err) {
        console.error(`start err: ${err}`)
      } else {
        console.log(`data: ${data}`)
      }
    })
  }
})

您可以从位于createContainer的源代码中找到POST /containers/create来电node_modules/dockerode/lib/docker.js