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
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
- 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
docker group.
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;
docker CLI 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 (and enable if 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 — use compose.yaml in 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.
1---2name: docker3description: Installs and uses Docker reliably with official docs. Use when installing Docker (Desktop or Engine), building or running containers, writing Dockerfiles, using docker compose, or when the user asks about containers, images, or Docker CLI.4---5
6# Docker — Install and Use Containers
7
8Enables 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.
9
10## When to Apply
11
12- User wants to **install Docker** (macOS, Linux, Windows)
13- User asks about **containers**, **images**, **Dockerfile**, **docker compose**
14- Building, running, or debugging **Docker** commands or workflows
15- User asks for "latest Docker docs" or "how do I use Docker"
16
17**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](LEARNINGS.md) (Integration with Docker Test).
18
19## Canonical Documentation URLs
20
21| Purpose | URL |
22|--------|-----|
23| Get started / overview | https://docs.docker.com/get-started/overview/ |
24| Get Docker (install) | https://docs.docker.com/get-started/get-docker/ |
25| Develop with containers | https://docs.docker.com/get-started/introduction/develop-with-containers/ |
26| Guides | https://docs.docker.com/guides/ |
27| Manuals (install, config, use) | https://docs.docker.com/manuals/ |
28| Reference (CLI, Dockerfile, API) | https://docs.docker.com/reference/ |
29| Engine install (Linux) | https://docs.docker.com/engine/install/ |
30| Docker Desktop Mac | https://docs.docker.com/desktop/install/mac-install/ |
31| Docker CLI reference | https://docs.docker.com/reference/cli/docker/ |
32| Dockerfile reference | https://docs.docker.com/reference/dockerfile/ |
33
34**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.
35
36---
37
38## Installation
39
40Install Docker on the host so the `docker` CLI and daemon are available. After install, ensure the daemon is running (`docker run hello-world`).
41
42### Installation (reliable paths)
43
44### macOS
45
46**Recommended: Docker Desktop**
47
481. Download from official docs: [Install Docker Desktop on Mac](https://docs.docker.com/desktop/install/mac-install/).
49 - Apple Silicon: `https://desktop.docker.com/mac/main/arm64/Docker.dmg`
50 - Intel: `https://desktop.docker.com/mac/main/amd64/Docker.dmg`
512. Open `Docker.dmg`, drag Docker to Applications, then open Docker.app and accept terms.
523. **CLI install (optional):** After downloading the DMG:
53 ```bash
54 sudo hdiutil attach Docker.dmg
55 sudo /Volumes/Docker/Docker.app/Contents/MacOS/install
56 sudo hdiutil detach /Volumes/Docker
57 ```
584. Verify: `docker run hello-world`
59
60**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.
61
62### Linux (Ubuntu example)
63
641. Prefer **Docker Engine from apt** (see [Install Docker Engine on Ubuntu](https://docs.docker.com/engine/install/ubuntu/)).
652. Remove conflicting packages first:
66 ```bash
67 sudo apt remove $(dpkg --get-selections docker.io docker-compose docker-compose-v2 docker-doc podman-docker containerd runc 2>/dev/null | cut -f1)
68 ```
693. Add Docker’s apt repo, then:
70 ```bash
71 sudo apt update
72 sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
73 sudo systemctl start docker
74 sudo docker run hello-world
75 ```
764. Optional (run without sudo): [Linux postinstall](https://docs.docker.com/engine/install/linux-postinstall/) — add user to `docker` group.
77
78**Convenience script (dev/test only):** `curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh`. Not recommended for production.
79
80### Windows
81
82Use [Get Docker](https://docs.docker.com/get-started/get-docker/) and follow **Docker Desktop for Windows** (WSL2 backend recommended).
83
84---
85
86## Core Workflow: Build and Run
87
881. **Dockerfile** in app directory (see [reference.md](reference.md) or [Dockerfile reference](https://docs.docker.com/reference/dockerfile/)). If any path in COPY has spaces, quote it (e.g. `COPY . "/app/Docker Skill"`).
892. **Build image:** `docker build -t <name> .`
903. **Run container:** `docker run -d -p HOST_PORT:CONTAINER_PORT <name>` (e.g. `-p 127.0.0.1:3000:3000`).
914. **List containers:** `docker ps` (running), `docker ps -a` (all).
925. **Stop/remove:** `docker stop <container>`, `docker rm <container>`.
93
94Example from official getting-started:
95
96```bash
97docker build -t getting-started .
98docker run -d -p 127.0.0.1:3000:3000 getting-started
99# Open http://localhost:3000
100```
101
102## Usage examples
103
104- **Run a one-off command and remove the container:**
105 ```bash
106 docker run --rm alpine echo "Hello from Alpine"
107 ```
108
109- **Create, run, then stop and remove a named container:**
110 ```bash
111 docker run --name my-test alpine echo "test"
112 docker stop my-test
113 docker rm my-test
114 ```
115
116- **Pull an image, run a minimal container, then remove container and image:**
117 ```bash
118 docker run --name hello hello-world
119 docker rm hello
120 docker rmi hello-world
121 ```
122
123- **Build and run a web app (port mapping):**
124 ```bash
125 docker build -t myapp .
126 docker run -d -p 127.0.0.1:3000:3000 myapp
127 docker ps
128 docker stop <container_id>
129 docker rm <container_id>
130 ```
131
132- **Compose (multi-service):**
133 ```bash
134 docker compose up -d
135 docker compose logs -f
136 docker compose down
137 ```
138
139---
140
141## Daemon Must Be Running
142
143- **Docker Desktop (Mac/Windows):** Ensure Docker Desktop app is running; `docker` CLI talks to its daemon.
144- **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.
145- **Linux:** `sudo systemctl start docker` (and `enable` if needed).
146- If the user sees "Cannot connect to the Docker daemon", direct them to start Docker Desktop or the engine service and try again.
147
148---
149
150## Quick Reference
151
152- **Images:** `docker pull <image>`, `docker images`, `docker rmi <image>`
153- **Containers:** `docker run`, `docker ps`, `docker stop`, `docker rm`, `docker logs <container>`
154- **Compose:** `docker compose up -d`, `docker compose down` — use `compose.yaml` in project root (see [Compose file reference](https://docs.docker.com/reference/compose-file/)).
155- **Cleanup:** `docker system prune -a` (removes unused images/containers/networks; use with care).
156
157## Volume mounts
158
159When 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](LEARNINGS.md).
160
161## Additional Resources
162
163- For detailed CLI and Dockerfile syntax, see [reference.md](reference.md).
164- For full specs, fetch from the official [reference](https://docs.docker.com/reference/) and [guides](https://docs.docker.com/guides/).
165- For volume-mount and environment learnings, see [LEARNINGS.md](LEARNINGS.md).