API Docs
This page demonstrates the usage of docker-compose
for Node.js.
Usage
docker-compose
current supports these commands:
buildAll(options)
- Build or rebuild servicesbuildMany(services, options)
- Build or rebuild servicesbuildOne(service, options)
- Build or rebuild serviceconfig(options)
- Validates configuration files and returns configuration yamlconfigServices(options)
- Returns list of services defined in configuration filesconfigVolumes(options)
- Returns list of volumes defined in configuration filescreateAll(options)
- Create or recreate servicescreateMany(services, options)
- Create or recreate servicescreateOne(service, options)
- Create or recreate servicedown(options)
- Stops containers and removes containers, networks, volumes, and images created byup
exec(container, command, options)
- Execcommand
insidecontainer
- uses-T
to properly handle stdin & stdoutkill(options)
- Force stop service containersimages(options)
- Show all created imageslogs(services, options)
- Show logs of service(s) - useoptions.follow
true|false
to turn on--follow
flagpauseOne(service, options)
- Pause the specified serviceport(service, containerPort, options)
- Returns the public port of the given service and internal port.ps(options)
- Lists containers informationpullAll(options)
- Pull all service imagespullMany(services, options)
- Pull service images specifiedpullOne(service, options)
- Pull a service imagerestartAll(options)
- Restart all servicesrestartMany(services, options)
- Restart servicesrestartOne(service, options)
- Restart servicerm(options, services)
- Remove stopped service containers - always uses the-f
flag due to non interactive mode -services
can optionally be used to select the containers to removerun(service, command, options)
- Run a one-offcommand
on a service - uses-T
to properly handle stdin & stdoutstop(options)
- Stop running containers without removing themstopOne(service, options)
- Stops one container without removing itstopMany(options,services)
- Stops containers without removing themunpauseOne(service, options)
- Resume the specified serviceupAll(options)
- Builds, (re)creates, starts, and attaches to containers for all services - always uses the-d
flag due to non interactive modeupMany(services, options)
- Builds, (re)creates, starts, and attaches to containers for the services specified inservices
- always uses the-d
flag due to non interactive modeupOne(service, options)
- Builds, (re)creates, starts, and attaches to containers for a service specified inservice
- always uses the-d
flag due to non interactive modeversion(options)
- Showdocker-compose
version stringsstats(service)
- Show service container stats
All commands return a Promise({object})
with stdout and stderr strings and an exit code:
{
out: 'stdout contents',
err: 'stderr contents',
exitCode: 0, // !== 0 in case of an error
}
Although the return type is a Promise
, it is still possible to get the process progres before the Promise
resolves, by passing a callback function to the optional callback
parameter.
Example
To start service containers based on the docker-compose.yml
file in your current directory, just call compose.up
like this:
compose.upAll({ cwd: path.join(__dirname), log: true })
.then(
() => { console.log('done')},
err => { console.log('something went wrong:', err.message)}
);
To get process progress
compose.upAll({
cwd: path.join(__dirname),
callback: (chunk: Buffer) => {
console.log('job in progres: ', chunk.toString())
}
})
.then(
() => { console.log('job done')},
err => { console.log('something went wrong:', err.message)}
);
To execute command inside a running container:
compose.exec('node', 'npm install', { cwd: path.join(__dirname) })
Options
docker-compose
accepts these params:
cwd {string}
: mandatory folder path to thedocker-compose.yml
executablePath {string}
: optional path to docker-compose executable in case it's not located in $PATH/path/to/docker-compose
config {(string|string[])}
: custom and/or multiple yml files can be specified (relative tocwd
)configAsString {string}
: configuration can be provided as is, instead of relying on a file. In caseconfigAsString
is providedconfig
will be ignored.[log] {boolean}
: optional setting to enable console logging (output ofdocker-compose
stdout
/stderr
output)[composeOptions] string[]|Array<string|string[]
: pass optional compose options like"--verbose"
or[["--verbose"], ["--log-level", "DEBUG"]]
or["--verbose", ["--loglevel", "DEBUG"]]
for all commands.[callback] (chunk: Buffer, sourceStream?: 'stdout' | 'stderr') => void
: optional callback function, that provides infromation about the process while it is still runing.[commandOptions] string[]|Array<string|string[]
: pass optional command options like"--build"
or[["--build"], ["--timeout", "5"]]
or["--build", ["--timeout", "5"]]
for theup
command. ViablecommandOptions
depend on the command (up
,down
etc.) itself
ps
ps(options)
- Lists containers for a Compose project, with current status and exposed ports.
ps
returns a Promise
of TypedDockerComposeResult<DockerComposePsResult>
.
A basic example looks like this:
const result = await compose.ps({ cwd: path.join(__dirname) })
result.data.services.forEach((service) => {
console.log(service.name, service.command, service.state, service.ports)
// state is e.g. 'Up 2 hours'
})
The resolved result
might look like this (for v2):
{
exitCode: 0,
err: '',
out: 'NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS\n' +
`compose_test_proxy nginx:1.19.9-alpine "/docker-entrypoint.sh nginx -g 'daemon off;'" proxy 1 second ago Up Less than a second 80/tcp\n` +
`compose_test_web nginx:1.16.0 "nginx -g 'daemon off;'" web 1 second ago Up Less than a second 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp\n`,
data: {
services: [
{
name: 'compose_test_proxy',
command: `"/docker-entrypoint.sh nginx -g 'daemon off;'"`,
state: 'Up Less than a second',
ports: [ { exposed: { port: 80, protocol: 'tcp' } } ]
},
{
name: 'compose_test_web',
command: `"nginx -g 'daemon off;'"`,
state: 'Up Less than a second',
ports: [
{
exposed: { port: 80, protocol: 'tcp' },
mapped: { port: 80, address: '0.0.0.0' }
},
{
exposed: { port: 443, protocol: 'tcp' },
mapped: { port: 443, address: '0.0.0.0' }
}
]
}
]
}
}
Only v2: If you need a defined state, you can use the --format json
command option. This will return one of the defined states paused | restarting | removing | running | dead | created | exited
as the state of a service.
const result = await compose.ps({ cwd: path.join(__dirname), commandOptions: [["--format", "json"]] })
result.data.services.forEach((service) => {
console.log(service.name, service.command, service.state, service.ports)
// state is one of the defined states: paused | restarting | removing | running | dead | created | exited
})