当你在容器内运行 docker
命令时遇到 "command not found" 错误,这是因为 Docker 默认不会安装在容器内部。以下是几种解决方法:
推荐的最佳实践是挂载宿主机的 Docker 套接字到容器中:
docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker [其他参数] [镜像名]
如果确实需要在容器内运行 Docker(不推荐用于生产环境):
# 在 Dockerfile 中添加
RUN apt-get update && apt-get install -y docker.io
然后构建并运行容器。
对于 CI/CD 等特殊场景,可以使用 Docker-in-Docker:
docker run --privileged -d docker:dind
考虑使用以下替代方法:
- 使用 podman
(兼容 Docker CLI 但不需要守护进程)
- 使用 nerdctl
(containerd 的 Docker 兼容 CLI)
- 重新设计应用架构,避免在容器内调用 Docker
在大多数情况下,推荐使用第一种方法(挂载套接字)或重新设计应用架构。