Docker
Template
Use the official installation script from get.docker.com. Thehello-world container run validates the installation.
// template.ts
import { Template } from 'e2b'
export const template = Template()
.fromUbuntuImage('24.04')
.runCmd('curl -fsSL https://get.docker.com | sudo sh')
.runCmd('sudo docker run --rm hello-world')
# template.py
from e2b import Template
template = (
Template()
.from_ubuntu_image("24.04")
.run_cmd("curl -fsSL https://get.docker.com | sudo sh")
.run_cmd("sudo docker run --rm hello-world")
)
Build
We recommend at least 2 CPUs and 2 GB of RAM for running Docker containers. With lower RAM, your sandbox might run out of memory.// build.ts
import { Template, defaultBuildLogger } from 'e2b'
import { template as dockerTemplate } from './template'
Template.build(dockerTemplate, 'docker', {
cpuCount: 2,
memoryMB: 2048,
onBuildLogs: defaultBuildLogger(),
})
# build.py
from e2b import Template, default_build_logger
from .template import template as dockerTemplate
Template.build(dockerTemplate, 'docker',
cpu_count=2,
memory_mb=2048,
on_build_logs=default_build_logger(),
)
Run
Run an Alpine container that prints a hello message.// sandbox.ts
import { Sandbox } from 'e2b'
const sbx = await Sandbox.create('docker')
const result = await sbx.commands.run('sudo docker run --rm alpine echo "Hello from Alpine!"')
console.log(result.stdout)
await sbx.kill()
# sandbox.py
from e2b import Sandbox
sbx = Sandbox.create('docker')
result = sbx.commands.run('sudo docker run --rm alpine echo "Hello from Alpine!"')
print(result.stdout)
sbx.kill()
Docker Compose
This example installs Docker and Docker Compose, then validates the setup with a Compose version check and a sample Compose run.Template
Create a new file namedtemplate-compose.ts (or template_compose.py).
// template-compose.ts
import { Template } from 'e2b'
export const composeTemplate = Template()
.fromUbuntuImage('24.04')
.runCmd([
'set -euxo pipefail',
'sudo apt-get update',
'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker.io',
'sudo usermod -aG docker user',
'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker-compose-plugin || true',
'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker-compose-v2 || true',
'sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker-compose || true',
'sudo docker compose version || sudo docker-compose --version',
])
# template_compose.py
from e2b import Template
compose_template = (
Template()
.from_ubuntu_image("24.04")
.run_cmd(
[
"set -euxo pipefail",
"sudo apt-get update",
"sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker.io",
"sudo usermod -aG docker user",
"sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker-compose-plugin || true",
"sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker-compose-v2 || true",
"sudo DEBIAN_FRONTEND=noninteractive apt-get install -y docker-compose || true",
"sudo docker compose version || sudo docker-compose --version",
]
)
)
template-compose.ts or template_compose.py file.
Build
// build-compose.ts
import { Template, defaultBuildLogger } from 'e2b'
import { composeTemplate } from './template-compose'
Template.build(composeTemplate, 'docker-compose', {
cpuCount: 2,
memoryMB: 2048,
onBuildLogs: defaultBuildLogger(),
})
# build_compose.py
from e2b import Template, default_build_logger
from template_compose import compose_template
Template.build(compose_template, "docker-compose",
cpu_count=2,
memory_mb=2048,
on_build_logs=default_build_logger(),
)
BuildInfo(... name='docker-compose', alias='docker-compose', tags=['default'])
Run
// sandbox-compose.ts
import { Sandbox } from 'e2b'
const sbx = await Sandbox.create('docker-compose')
await sbx.commands.run('mkdir -p /tmp/docker-compose-test')
await sbx.files.write('/tmp/docker-compose-test/compose.yaml', [
'services:',
' hello:',
' image: busybox:1.36',
' command: ["sh", "-lc", "echo docker-compose-ok"]',
'',
].join('\n'))
const result = await sbx.commands.run(`
set -euxo pipefail
cd /tmp/docker-compose-test
if docker compose version >/dev/null 2>&1; then
docker compose up --abort-on-container-exit --remove-orphans
docker compose down --remove-orphans -v
echo "Docker Compose ran successfully"
elif docker-compose --version >/dev/null 2>&1; then
docker-compose up --abort-on-container-exit --remove-orphans
docker-compose down --remove-orphans -v
echo "Docker Compose ran successfully"
else
echo "No compose command available"
exit 127
fi
`)
console.log(result.stdout)
await sbx.kill()
# sandbox_compose.py
from e2b import Sandbox
sbx = Sandbox.create("docker-compose")
sbx.commands.run("mkdir -p /tmp/docker-compose-test")
sbx.files.write(
"/tmp/docker-compose-test/compose.yaml",
"""
services:
hello:
image: busybox:1.36
command: ["sh", "-lc", "echo docker-compose-ok"]
""",
)
result = sbx.commands.run(
"""
set -euxo pipefail
cd /tmp/docker-compose-test
if docker compose version >/dev/null 2>&1; then
docker compose up --abort-on-container-exit --remove-orphans
docker compose down --remove-orphans -v
echo "Docker Compose ran successfully"
elif docker-compose --version >/dev/null 2>&1; then
docker-compose up --abort-on-container-exit --remove-orphans
docker-compose down --remove-orphans -v
echo "Docker Compose ran successfully"
else
echo "No compose command available"
exit 127
fi
""",
)
print(result.stdout)
sbx.kill()
hello_1 | docker-compose-ok
Docker Compose ran successfully