Docker.Service.Start.js
JavaScript source for A Docker module for Node.js, 70 lines. Raw file
const fs = require('fs');
const Security = require('Security')
const Docker =
{
Container: require('./../Docker.Container'),
Image: require('./../Docker.Image'),
Config: require('./../Docker.Config'),
Service:
{
Stop: require('./Docker.Service.Stop'),
Start: ( imageName, dockerfile, contextPath, extraArguments ) =>
{
imageName = Security.String(imageName)
dockerfile = Security.String(dockerfile)
contextPath = Security.String(contextPath)
extraArguments = Security.Array(Security.String)(extraArguments)
const networkName = Docker.Config._networkName;
if (networkName !== undefined) {
extraArguments.push(`--network`, networkName)
}
if (Docker.Config._restarting) {
if (Docker.Config._restartingLimit > 0) {
extraArguments.push(`--restart`, `on-failure:${Docker.Config._restartingLimit}`)
}
else {
extraArguments.push(`--restart`, `always`)
}
}
if (Docker.Config._envVariables.length > 0) {
Docker.Config._envVariables.forEach(({name, value}) => {
extraArguments.push(`-e`, `${name}=${value}`)
})
}
const containerName = imageName;
const dockerfilePath = `${contextPath}/Dockerfile`;
Docker.Service.Stop(imageName)
fs.writeFileSync( dockerfilePath, dockerfile )
let containerId = -1;
try {
Docker.Image.Add(
imageName,
contextPath
)
containerId = Docker.Container.Start(
imageName,
containerName,
extraArguments
)
}
catch (e) {
console.error("Error", e)
throw e
}
finally {
fs.unlinkSync( dockerfilePath )
}
return containerId;
}
}
}
module.exports = Docker.Service.Start