docker使用经验
docker run --rm -p 8000:8000 --env-file .env mssql-mcp
| 部分 | 含义 |
|---|---|
| docker run | 用某个镜像启动一个容器 |
| --rm | 容器停止后自动删除,不留垃圾 |
| -p 8000:8000 | 端口映射,把宿主机 8000 端口转发到容器 8000 端口 |
| --env-file .env | 把宿主机当前目录下的 .env 文件作为环境变量注入容器 |
| mssql-mcp | 使用的镜像名 |
docker run -d --rm -p 8000:8000 --name mssql-mcp --env-file .env mssql-mcp
- -d:后台运行,命令立刻返回,终端不被占用
- --name mssql-mcp:给容器起名字,方便 docker logs mssql-mcp、docker stop mssql-mcp
点击查看代码
``# 后台启动
docker run -d --rm -p 8000:8000 --name mssql-mcp --env-file .env mssql-mcp
# 看日志确认启动成功
docker logs mssql-mcp
# 查看/停止
docker ps
docker logs mssql-mcp
docker stop mssql-mcp
# 端口占用排查
netstat -ano | findstr :8000
# 跑你的测试
python src/test/test_ff.py
uv run python src/test/test_ff.py
掌握 5 个最核心的指令
| 指令 | 一句话理解 |
|---|---|
| FROM | 从哪个基础镜像开始 |
| WORKDIR | 之后的操作在哪个目录 |
| RUN | 构建时执行什么命令 |
| COPY | 把本地什么文件复制进去 |
| CMD | 容器启动时运行什么 |
- Docker + uv + MCP 项目常用命令速查
点击查看代码
# ============================================================
# 一、构建镜像
# ============================================================
# 重建镜像(改 Dockerfile / pyproject.toml / uv.lock 后必须执行)
docker build -t mssql-mcp .
# ============================================================
# 二、启动容器
# ============================================================
# 标准启动(后台运行 + 挂载 src + 热更新)
docker run -d --rm `
-p 8000:8000 `
--name mssql-mcp `
--env-file .env `
-v ${PWD}/src:/app/src `
mssql-mcp
# 说明:
# -d 后台运行
# --rm 容器停止后自动删除
# -p 8000:8000 端口映射(宿主:容器)
# --name 容器名
# --env-file 加载 .env 变量
# -v 挂载 src/ 实现热更新
# ============================================================
# 三、日常操作
# ============================================================
# 查看运行中的容器
docker ps
# 查看所有容器(含已停止)
docker ps -a
# 查看日志(实时)
docker logs -f mssql-mcp
# 查看日志(过滤关键词)
docker logs mssql-mcp | Select-String "HOT RELOAD"
# 停止容器
docker stop mssql-mcp
# 重启容器(改 src/ 下 .py 后只需这步)
docker restart mssql-mcp
# ============================================================
# 四、改代码后的标准流程
# ============================================================
# 场景 A:只改了 src/ 下的 .py 文件
docker restart mssql-mcp
# 场景 B:改了 Dockerfile / pyproject.toml / uv.lock / .env
docker stop mssql-mcp
docker build -t mssql-mcp .
docker run -d --rm `
-p 8000:8000 `
--name mssql-mcp `
--env-file .env `
-v ${PWD}/src:/app/src `
mssql-mcp
# ============================================================
# 五、验证
# ============================================================
# 确认挂载生效
docker inspect mssql-mcp --format '{{json .Mounts}}'
# 确认代码从挂载目录加载(期望输出 /app/src/mssql_mcp)
docker exec mssql-mcp uv run --no-sync python -c "import mssql_mcp, os; print(os.path.dirname(mssql_mcp.__file__))"
# 查看容器内 Python 版本
docker exec mssql-mcp python --version
# 查看容器内环境变量
docker exec mssql-mcp env
# ============================================================
# 六、客户端测试
# ============================================================
# 跑测试脚本
uv run python src\test\test_ff.py
# 本地直接验证配置
uv run python -c "from mssql_mcp.config.settings import get_settings; print(get_settings().db.driver)"
# ============================================================
# 七、端口排查
# ============================================================
# 查看 8000 端口占用
netstat -ano | findstr :8000
# 查看占用进程
tasklist | findstr <PID>
# 强杀进程
taskkill /PID <PID> /F
# ============================================================
# 八、清理
# ============================================================
# 停止并删除容器(--rm 启动时已自动删,此命令用于手动清理)
docker stop mssql-mcp
# 删除镜像
docker rmi mssql-mcp
# 清理所有停止的容器、无用网络、悬空镜像
docker system prune -f

浙公网安备 33010602011771号