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