我想使用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}`)
}
})
}
})
答案 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
。