Docker — Install and Use Containers
Enables OpenClaw (and Cursor) to install Docker and use it reliably. Base all guidance on official Docker docs; when in doubt, fetch from canonical URLs below.
When to Apply
- User wants to install Docker (macOS, Linux, Windows)
- User asks about containers, images, Dockerfile, docker compose
- Building, running, or debugging Docker commands or workflows
- User asks for "latest Docker docs" or "how do I use Docker"
When running inside Docker Test: The test container already has the Docker CLI and the host socket mounted. Use docker directly to create, run, stop, and remove containers; do not try to install Docker or use sudo. See LEARNINGS.md (Integration with Docker Test).
Canonical Documentation URLs
| Purpose | URL |
|---|---|
| Get started / overview | https://docs.docker.com/get-started/overview/ |
| Get Docker (install) | https://docs.docker.com/get-started/get-docker/ |
| Develop with containers | https://docs.docker.com/get-started/introduction/develop-with-containers/ |
| Guides | https://docs.docker.com/guides/ |
| Manuals (install, config, use) | https://docs.docker.com/manuals/ |
| Reference (CLI, Dockerfile, API) | https://docs.docker.com/reference/ |
| Engine install (Linux) | https://docs.docker.com/engine/install/ |
| Docker Desktop Mac | https://docs.docker.com/desktop/install/mac-install/ |
| Docker CLI reference | https://docs.docker.com/reference/cli/docker/ |
| Dockerfile reference | https://docs.docker.com/reference/dockerfile/ |
Rule: For install steps, CLI syntax, or Dockerfile instructions, fetch the relevant doc URL and use that content. Do not rely on training data for version-specific install or command details.
Installation
Install Docker on the host so the docker CLI and daemon are available. After install, ensure the daemon is running (docker run hello-world).
Installation (reliable paths)
macOS
Recommended: Docker Desktop
- Download from official docs: Install Docker Desktop on Mac.
- Apple Silicon:
https://desktop.docker.com/mac/main/arm64/Docker.dmg - Intel:
https://desktop.docker.com/mac/main/amd64/Docker.dmg
- Apple Silicon:
- Open
Docker.dmg, drag Docker to Applications, then open Docker.app and accept terms. - CLI install (optional): After downloading the DMG:
sudo hdiutil attach Docker.dmg sudo /Volumes/Docker/Docker.app/Contents/MacOS/install sudo hdiutil detach /Volumes/Docker - Verify:
docker run hello-world
OpenClaw / automation: If docker is missing and the user is on macOS, suggest installing via Homebrew: brew install --cask docker, then starting Docker Desktop so the daemon is running.
Linux (Ubuntu example)
- Prefer Docker Engine from apt (see Install Docker Engine on Ubuntu).
- Remove conflicting packages first:
sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc 2>/dev/null | cut -f1) - Add Docker’s apt repo, then:
sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo systemctl start docker sudo docker run hello-world - Optional (run without sudo): Linux postinstall — add user to
dockergroup.
Convenience script (dev/test only): curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh. Not recommended for production.
Windows
Use Get Docker and follow Docker Desktop for Windows (WSL2 backend recommended).
Core Workflow: Build and Run
- Dockerfile in app directory (see reference.md or Dockerfile reference). If any path in COPY has spaces, quote it (e.g.
COPY . "/app/Docker Skill"). - Build image:
docker build -t <name> . - Run container:
docker run -d -p HOST_PORT:CONTAINER_PORT <name>(e.g.-p 127.0.0.1:3000:3000). - List containers:
docker ps(running),docker ps -a(all). - Stop/remove:
docker stop <container>,docker rm <container>.
Example from official getting-started:
docker build -t getting-started .
docker run -d -p 127.0.0.1:3000:3000 getting-started
# Open http://localhost:3000
Usage examples
-
Run a one-off command and remove the container:
docker run --rm alpine echo "Hello from Alpine" -
Create, run, then stop and remove a named container:
docker run --name my-test alpine echo "test" docker stop my-test docker rm my-test -
Pull an image, run a minimal container, then remove container and image:
docker run --name hello hello-world docker rm hello docker rmi hello-world -
Build and run a web app (port mapping):
docker build -t myapp . docker run -d -p 127.0.0.1:3000:3000 myapp docker ps docker stop <container_id> docker rm <container_id> -
Compose (multi-service):
docker compose up -d docker compose logs -f docker compose down
Daemon Must Be Running
- Docker Desktop (Mac/Windows): Ensure Docker Desktop app is running;
dockerCLI talks to its daemon. - Colima (macOS): If using Colima instead of Docker Desktop, set
DOCKER_HOST(e.g.unix://$HOME/.colima/default/docker.sock) so the CLI and scripts find the daemon. - Linux:
sudo systemctl start docker(andenableif needed). - If the user sees "Cannot connect to the Docker daemon", direct them to start Docker Desktop or the engine service and try again.
Quick Reference
- Images:
docker pull <image>,docker images,docker rmi <image> - Containers:
docker run,docker ps,docker stop,docker rm,docker logs <container> - Compose:
docker compose up -d,docker compose down— usecompose.yamlin project root (see Compose file reference). - Cleanup:
docker system prune -a(removes unused images/containers/networks; use with care).
Volume mounts
When using -v HOST:CONTAINER, use stable host paths (e.g. a directory under the project or skill root). Avoid temporary directories (e.g. from mktemp); they may not mount reliably in some environments (sandboxes, CI, remote Docker). See LEARNINGS.md.
Additional Resources
- For detailed CLI and Dockerfile syntax, see reference.md.
- For full specs, fetch from the official reference and guides.
- For volume-mount and environment learnings, see LEARNINGS.md.