Docker 与 Docker Compose 常用命令大全(2026 实战版)
·
目录
一、Docker 基础命令
1. 镜像管理
# 拉取镜像(默认走 registry-mirrors 加速)
docker pull nginx:latest
# 从指定仓库拉取(绕过加速直连)
docker pull docker.m.daocloud.io/library/nginx:latest
# 查看本地镜像
docker images
# 查看镜像详细信息
docker inspect nginx
# 搜索镜像
docker search redis
# 给镜像打标签
docker tag nginx:latest myregistry.com/nginx:v1
# 推送镜像到仓库
docker push myregistry.com/nginx:v1
# 删除镜像(-f 强制删除)
docker rmi nginx:latest
# 删除悬空镜像(无标签)
docker image prune
2. 容器生命周期
# 创建并启动容器(最常用)
docker run -d --name my-nginx -p 8080:80 nginx
# run 常用参数速查
# -d 后台运行
# --name 容器命名
# -p 8080:80 端口映射(宿主机:容器)
# -v /host:/cont 数据卷挂载
# -e KEY=value 环境变量
# --restart=always 开机自启
# --network 指定网络
# 启动/停止/重启容器
docker start my-nginx
docker stop my-nginx
docker restart my-nginx
# 暂停/恢复(不终止进程)
docker pause my-nginx
docker unpause my-nginx
# 删除容器(-f 强制删除运行中的)
docker rm my-nginx
docker rm -f my-nginx
# 进入容器交互式终端
docker exec -it my-nginx bash
# 在容器内执行单条命令
docker exec my-nginx ls /etc/nginx
# 查看运行中的容器
docker ps
# 查看所有容器(含已停止)
docker ps -a
# 查看容器资源占用
docker stats
3. 容器运维
# 查看容器日志(-f 实时跟踪,--tail 只看末尾 N 行)
docker logs my-nginx
docker logs -f --tail 100 my-nginx
# 查看容器内进程
docker top my-nginx
# 复制文件:容器 -> 宿主机
docker cp my-nginx:/etc/nginx/nginx.conf ./nginx.conf
# 复制文件:宿主机 -> 容器
docker cp ./nginx.conf my-nginx:/etc/nginx/nginx.conf
# 查看容器端口映射
docker port my-nginx
# 容器提交为新镜像
docker commit my-nginx my-nginx:v1
二、Docker Compose 命令
注意:新版 Docker 已内置 compose 插件,
docker compose(带空格) 是 v2 命令;
旧版docker-compose(带连字符)是 v1,新项目一律用docker compose。
# 构建并启动服务(-d 后台运行)
docker compose up -d
# 仅构建不启动
docker compose build
# 查看服务状态
docker compose ps
# 查看所有服务日志(-f 实时跟踪)
docker compose logs
docker compose logs -f
docker compose logs -f <service-name>
# 停止服务(保留容器和网络)
docker compose stop
# 停止并删除容器、网络(保留数据卷)
docker compose down
# 彻底清理:连同数据卷一起删(⚠️ 数据不可恢复)
docker compose down -v
# 进入某个服务容器
docker compose exec <service-name> bash
# 查看配置(校验 compose 文件语法)
docker compose config
# 重新创建变更的服务(配置修改后生效)
docker compose up -d --build
# 滚动重启某服务
docker compose restart <service-name>
# 拉取所有服务最新镜像
docker compose pull
docker-compose.yml 示例模板
version: "3.8"
services:
web:
image: nginx:latest
container_name: my-nginx
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
environment:
- TZ=Asia/Shanghai
restart: always
db:
image: mysql:8.0
container_name: my-mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_DATABASE: appdb
volumes:
- mysql-data:/var/lib/mysql
restart: always
volumes:
mysql-data:
三、网络与数据卷
# 查看网络列表
docker network ls
# 创建网络(bridge 模式)
docker network create my-net
# 容器加入网络
docker network connect my-net my-nginx
# 容器脱离网络
docker network disconnect my-net my-nginx
# 查看网络详情(含接入的容器)
docker network inspect my-net
# 删除网络
docker network rm my-net
# 查看数据卷列表
docker volume ls
# 创建数据卷
docker volume create my-data
# 查看数据卷详情
docker volume inspect my-data
# 删除未使用的数据卷
docker volume prune
四、日志与排障
# 查看容器日志
docker logs -f --tail 200 <container>
# 查看容器完整配置(含启动命令、挂载、环境变量)
docker inspect <container>
# 实时查看进程
docker top <container>
# 查看事件流(容器创建/删除等)
docker events
# 查看 Docker 系统信息(含镜像加速配置)
docker info
# 查看 daemon 实时日志(macOS Docker Desktop)
tail -f ~/Library/Containers/com.docker.docker/Data/log/host/docker.log
五、清理与优化
# 删除所有已停止的容器
docker container prune
# 删除所有悬空镜像
docker image prune
# 删除所有未使用的镜像(-a 全部)
docker image prune -a
# 删除所有未使用的网络
docker network prune
# 删除所有未使用的数据卷(⚠️ 慎用)
docker volume prune
# 一键清理所有无用资源
docker system prune
# 连带删除数据卷(⚠️ 慎用,数据不可恢复)
docker system prune -a --volumes
# 查看磁盘占用
docker system df
六、国内镜像加速配置(实战踩坑)
背景
国内直连 docker.io 官方源极不稳定,拉取镜像经常失败。需要配置 registry mirror(镜像加速器)。
配置文件位置
- macOS Docker Desktop:
~/.docker/daemon.json - Linux:
/etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.1panel.live",
"https://dockerproxy.net",
"https://docker.m.daocloud.io"
]
}
⚠️ 踩坑记录(重要)
- 高校源大多已失效:清华(mirrors.tuna.tsinghua.edu.cn)、上海交大(mirror.sjtu.edu.cn)等源 2024-2025 年陆续停止 docker registry 代理服务,
/v2/接口返回 404,配置了等于没配,拉镜像照样失败。 - Docker Desktop 重启会覆盖配置:直接改
daemon.json后,如果用killall com.docker.backend强杀,Docker Desktop 重启可能把配置还原。正确姿势:改完配置 → 从菜单正常退出 Docker Desktop → 重新打开。 - 验证配置是否生效:
# 查看实际加载的镜像加速器
docker info | grep -A5 "Registry Mirrors"
# 实测拉取(不带任何前缀,能成功说明加速生效)
docker pull hello-world
其他国内源备选
# 如果上面的源失效,可以测试这些(返回 200/401 均可用)
docker.1ms.run
dockerproxy.net
docker.m.daocloud.io
hub.rat.dev
docker.1panel.live
七、常见问题 FAQ
Q1: docker pull 报 "not found" / 超时?
大概率是国内网络问题。检查 docker info 的 Registry Mirrors 是否配置了可用的加速源,或改用 docker.m.daocloud.io/library/<镜像> 前缀直连。
Q2: docker-compose 命令不存在?
新版 Docker 用 docker compose(带空格)。docker-compose 是旧版 v1,需单独安装或已弃用。
Q3: 容器启动后立刻退出?
# 先看退出原因
docker logs <container>
# 再查看容器状态和退出码
docker inspect <container> | grep -i exit
常见原因:启动命令错误、端口被占用、依赖的服务未就绪。
Q4: 如何让容器开机自启?
run 时加 --restart=always,compose 里配 restart: always。
Q5: 容器内时间不对?
挂载时区:
docker run -d -v /etc/localtime:/etc/localtime:ro nginx
# 或设置环境变量
-e TZ=Asia/Shanghai
Q6: docker system prune 会不会删掉我的数据?
docker system prune 默认不删数据卷;但 -a --volumes 会连带删除所有未使用的数据卷,数据不可恢复,慎用。
Q7: 怎么查看容器实际占用的磁盘?
docker system df
速查卡(收藏版)
| 场景 | 命令 |
|---|---|
| 拉镜像 | docker pull <image> |
| 跑容器 | docker run -d --name x -p 80:80 <image> |
| 进容器 | docker exec -it x bash |
| 看日志 | docker logs -f --tail 100 x |
| 停/删 | docker stop x && docker rm x |
| Compose 启动 | docker compose up -d |
| Compose 停止 | docker compose down |
| 看资源 | docker stats / docker system df |
| 清理 | docker system prune -a --volumes(慎用) |
如果本文对你有帮助,欢迎点赞收藏。评论区可以交流 Docker 使用中遇到的问题。
更多推荐
所有评论(0)