Docker provides a REST API that lets you manage containers, images, networks, and volumes programmatically. It runs on a Unix socket and is available on every Docker installation.
Enable the API
The Docker daemon exposes its API on a Unix socket by default:
curl --unix-socket /var/run/docker.sock http://localhost/v1.44/info | jq .Containers
List Containers
const response = await fetch("http://localhost/v1.44/containers/json?all=true", {
socketPath: "/var/run/docker.sock"
});
const containers = await response.json();
containers.forEach(c => console.log(`${c.Names[0]}: ${c.State}`));
Using Dockerode (Node.js SDK)
npm install dockerode
import Docker from "dockerode";
const docker = new Docker();
// List running containers
const containers = await docker.listContainers();
containers.forEach(c => {
console.log(`${c.Names[0]} — ${c.Image} — ${c.State}`);
});
Create and Start Container
// Pull image
await docker.pull("nginx:latest");
// Create container
const container = await docker.createContainer({
Image: "nginx:latest",
name: "my-nginx",
ExposedPorts: { "80/tcp": {} },
HostConfig: {
PortBindings: { "80/tcp": [{ HostPort: "8080" }] },
RestartPolicy: { Name: "unless-stopped" }
},
Env: ["NGINX_HOST=localhost"]
});
await container.start();
console.log("Container started!");
Container Logs
const container = docker.getContainer("my-nginx");
// Get logs
const logs = await container.logs({
stdout: true, stderr: true, timestamps: true, tail: 50
});
console.log(logs.toString());
// Stream logs in real-time
const stream = await container.logs({ follow: true, stdout: true });
stream.on("data", (chunk) => process.stdout.write(chunk));
Execute Command in Container
const exec = await container.exec({
Cmd: ["ls", "-la", "/usr/share/nginx/html"],
AttachStdout: true
});
const { output } = await exec.start();
output.pipe(process.stdout);
Image Management
// List images
const images = await docker.listImages();
images.forEach(img => {
console.log(`${img.RepoTags?.[0]} — ${(img.Size / 1e6).toFixed(0)}MB`);
});
// Build from Dockerfile
const stream = await docker.buildImage({
context: "./app",
src: ["Dockerfile", "package.json", "src/"]
}, { t: "my-app:latest" });
Need to extract or automate web content at scale? Check out my web scraping tools on Apify — no coding required. Or email me at spinov001@gmail.com for custom solutions.
Top comments (0)