WSL终端命令:

	# 查看已安装的WSL发行版
	wsl --list --verbose
	# 关闭指定WSL发行版
	wsl --terminate Ubuntu-24.04
	# 彻底关闭WSL
	wsl --shutdown
	# 设置默认登录用户(避免每次 -u 指定,ruofu是我的ID名字)
	ubuntu config --default-user ruofu
	#进入终端: 
	wsl -d Ubuntu-24.04 -u ruofu

一. 运行容器

1. 构建镜像命令:

	#构建镜像 + 启动容器,或修改了代码
	docker compose up -d --build
	
	#仅构建镜像,不启动容器。 强制丢弃所有缓存,从头开始
	docker compose build --no-cache
	
	#启动容器(用已有镜像启动),不构建镜像,或未修改代码
	docker compose up -d

build: 构建镜像
up: 构建 + 启动
-d: 是 --detach 的缩写,意思是后台运行(分离模式)。
--no-cache: 只是一个修饰参数,告诉 Docker “不要用之前的半成品,全部重做”,无缓存构建

2. 停止和启动命令

	# 暂停容器(不会关闭进程,冻结)
	docker compose pause web
	
	# 恢复暂停的容器
	docker compose unpause web
	
	# 只临时停止容器,不删除(后续可以直接重启)
	docker compose stop
	docker compose start
	
	#停止 + 清理当前项目所有容器**(web、worker、redis): 
	docker compose down 
	#(删除这些容器、项目专属的网桥网络, 不会删除你构建好的镜像、数据卷,下次 up 还能复用镜像)
	
	#只停止某一个服务
	docker compose stop web
	
	#停止后直接删除单个容器
	docker compose rm web

3. 容器状态查看

(1)看状态(有没有活), 确认启动成功:
只显示当前目录下正在运行的容器: : docker compose ps
或:docker compose ps -a
-a (all): 这个参数的意思是“显示所有容器”,包括那些已经挂掉(Exited)的。

二. 磁盘清理

	# 0. 查看 Docker 磁盘占用详情(先诊断再清理)
	docker system df
	
	# **1. 停止并清理当前项目所有容器**
	docker compose down
	
	# **2. 删除业务镜像**
	docker rmi 镜像名 镜像名
		# 比如:
	docker rmi ai_rag_answer-web ai_rag_answer-worker
	
	# **3. 清理构建缓存释放磁盘**
	docker image prune -f
	docker builder prune -f
	
	# **4. 删除挂载的数据卷(会清空持久化数据,谨慎用)**
	docker compose down -v
	
	# 5. 🔥 核弹级清理:删除所有未使用的镜像、停止的容器、未使用的网络、构建缓存
	docker system prune -a -f
	
	# 6. 在上述基础上连数据卷一起删(⚠️ 极度危险)
	docker system prune -a --volumes -f
	
	# 7.删除未被任何容器使用的孤立数据卷(谨慎,会删无主持久化数据)
	docker volume prune -f
	
	# 8.删除无用网桥网络
	docker network prune -f

三. 日志查看(排错核心)

1. 实时跟踪日志

	# 查看所有服务日志
	docker compose logs -f
	# 只看 web 服务最近 200 行并持续跟踪
	docker compose logs -f --tail=200 web
	# 查看它们为什么“罢工:
	docker compose logs web worker
	# 或者实时的报错流:
	docker compose logs -f web worker
	#(web 和 worker 是我的两个容器名字)

2. 查看指定时间段/错误段的日志

	#指定时间段
	docker compose logs --since="2026-06-23T10:00:00" web
	#筛选出所有包含 "error" 关键字的行。
	docker compose logs web | grep error 

四. 容器调试与交互

当服务启动失败或需要进入容器内部排查问题时必用。

1. 进入运行中的容器终端:

# 以 root 用户进入 web 服务的 bash/shell
docker compose exec -u root web /bin/bash
# 如果容器内没有 bash,尝试 sh
docker compose exec web sh
# 交互式进入容器(常用bash)
docker compose exec -it web bash
# 如果容器里只有sh没有bash
docker compose exec -it worker sh

# 普通docker原生进入方式(不用compose时)
docker exec -it 容器ID bash

# 以root用户进入容器(容器内权限不足时用)
docker compose exec -u root -it web bash

⚠️ 注意:这里用 exec而不是 run。exec是进入已存在的容器;run会创建一个全新的临时容器。

2. 在容器中执行单条命令(不进入交互模式):

# 例如:查看容器内的环境变量
docker compose exec web env
# 例如:在容器内运行 Django/Flask 迁移
docker compose exec web python manage.py migrate

3. 一次性临时容器(用于测试/脚本):

# 启动一个临时的 web 服务容器跑完命令就销毁
docker compose run --rm web python manage.py shell

五. 状态检查与健康诊断

docker compose ps 和 docker compose ps -a查看当前项目所有容器状态(端口映射、运行时长)
docker compose top 查看容器内进程及资源占用
docker inspect <容器名> 查看容器完整元数据(挂载点、网络IP、环境变量等)
docker compose config 验证 docker-compose.yml语法并展开最终配置(排错神器)

六. 重新构建镜像

1. 什么时候才需要彻底重来(重新构建镜像)?

只有当你动了以下东西时,才需要漫长的等待:
(1)修改了 requirements.txt: 加了新库或改了版本号(Docker 需要重新跑 pip install)。
(2)修改了 Dockerfile本身: 比如换了基础镜像,或者改了系统配置。
(3)执行了强制清理命令: 比如 docker compose build --no-cache(这会强制丢弃所有缓存,从头开始)。
(4)修改了系统级配置 如更换基础镜像、安装新系统包、设置环境变量(ENV)
(5)没有挂载代码卷 代码被 COPY 进了镜像,容器内是副本,外部修改不可见.

以下情况不需要重新构建镜像:

(1)修改docker-compose.yml文件,不需要重新构建镜像(Build),但必须重启容器
(2)你的 docker-compose.yml 中配置了代码目录挂载(Volume):

	volumes:
	  - ./src:/app/src  # 宿主机代码直接映射进容器

— 修改业务代码(Python/JS/Go 等源码、模板、静态资源):不需要重建。文件变更会实时同步到容器内,重启服务或等待热重载即可。
— 修改配置文件(如 .env、Nginx 配置):不需要重建,但通常需要 docker compose restart web 使配置生效。
💡 这就是开发环境推荐挂载代码的原因:改完即生效,无需漫长等待。

2. 如何重新镜像?

(1)先清理旧环境:

	    #清理孤儿容器(安全)
	    docker compose down --remove-orphans
		#只想重建环境(安全)
		docker compose down --rmi all
		#想连数据一起销毁(危险!!,慎用)
		docker compose down --rmi all -v

--remove-orphans: 会清除那些在 docker-compose.yml 中已被移除但仍在运行的残留容器。
down: 停止并删除所有正在运行的容器。
--rmi all:删除由 docker compose build 构建出的镜像,但它不会删除基础镜像(如 python:3.11),也不会删除构建缓存(l除非加 --no-cache),不会删除任何数据卷(volume),
-v: 删除 Docker 自己创建的卷(volume),不删你宿主机上的文件(bind mount)。
删除docker-compose.yml 中写的 dbdata(卷,Type 是 volume) , 不删除 ./data(绑定挂载,Type 是 bind),
不删除外部卷(external: true)即使声明在 volumes: 中。

安全做法:只删镜像,保留数据
除非你的数据脏了,或者你不想要数据了。

(2)然后再从零开始(两种方式)
2.1 构建+启动: docker compose up --build -d
2.2 无缓存构建(推荐): docker compose build --no-cache
然后启动 : docker compose up -d

3。磁盘清理:频繁重建会产生大量悬空镜像,定期执行:

      # 清理构建缓存释放磁盘
  	docker image prune -f
  	docker builder prune -f

更多命令参考《二.磁盘清理》

七. 文件拷贝(宿主机 ↔ 容器)

不需要重建镜像就能更新配置文件或提取产物。

	# 从容器复制到宿主机
	docker cp web:/容器内文件路径 /宿主机保存路径
	docker cp web:/app/logs/error.log ./error.log
	
	# 从宿主机复制到容器
	docker cp /宿主机路径 web:/容器内路径
	docker cp ./local_config.yaml web:/app/config.yaml

  #把本地 ./data/chroma_db 完整写入共享匿名卷 chroma_data,所有容器永久共享
  docker run --rm \
-v $(pwd)/data/chroma_db:/src \
-v chroma_data:/dst \
alpine cp -r /src/. /dst/

八 。补充操作

	# 手动给镜像打标签
	docker tag 原镜像名:tag 仓库地址/镜像名:版本
	
	# 镜像导出(迁移服务器离线部署用)
	docker save -o xxx.tar 镜像名1 镜像名2
	# 离线导入镜像
	docker load -i xxx.tar
	
	# 查看镜像分层构建详情(排查镜像体积过大)
	docker history 镜像名
  
  # 查看Docker磁盘占用详情(镜像、容器、卷、缓存占用大小)
	docker system df
	
	# 重启Docker服务(WSL内docker挂了时报错用)
	sudo service docker restart
	
	# 设置Docker开机自启
	sudo systemctl enable docker

更多推荐