用 Docker 搭一个自己的 AI 编程工作台:Ollama、WebUI、Code Server 配置全给你
AI编程 Docker部署教程|附配置文件
随着大模型能力的快速提升,越来越多开发者开始把 AI 融入日常编程流程:代码生成、Bug 排查、接口文档编写、单元测试生成、代码解释、项目重构等场景都可以借助 AI 提效。如果你希望在自己的服务器、NAS、云主机或本地电脑上搭建一套可长期使用的“AI 编程环境”,Docker 是非常推荐的部署方式。
本文将以 Docker + Docker Compose 为核心,介绍如何部署一套适合 AI 编程使用的环境。教程会覆盖基础环境准备、目录规划、配置文件编写、容器启动、模型配置、反向代理、常见问题排查等内容,并附上完整可用的配置文件。
本文适合以下读者:
- 想在本地或服务器上部署 AI 编程工具的开发者;
- 希望使用 Docker 管理 AI 服务的个人用户;
- 想搭建私有化 AI 编程助手的团队;
- 希望降低环境配置成本、快速迁移部署的运维或后端工程师。
一、整体方案说明
本文采用一个相对通用、稳定且易扩展的方案:
- Ollama:用于在本地运行大语言模型;
- Open WebUI:提供网页端聊天界面,可连接 Ollama;
- Code Server:浏览器版 VS Code,用于在线写代码;
- Docker Compose:统一编排多个服务;
- Nginx 可选:用于反向代理、绑定域名和 HTTPS。
部署完成后,你可以通过浏览器访问:
http://服务器IP:3000:进入 Open WebUI,与 AI 模型对话;http://服务器IP:8080:进入 Code Server,在线编写代码;- Ollama 服务会在容器内部提供模型推理能力。
如果你只是个人使用,可以直接通过端口访问;如果你准备长期使用,建议配置域名和 HTTPS。
二、部署前准备
1. 服务器配置建议
AI 编程场景对硬件有一定要求,尤其是运行本地模型时。下面是推荐配置:
| 使用场景 | CPU | 内存 | 磁盘 | GPU |
|---|---|---|---|---|
| 轻量测试 | 2 核 | 4GB | 20GB | 非必须 |
| 日常开发 | 4 核 | 8GB | 50GB | 可选 |
| 运行 7B 模型 | 4 核以上 | 16GB | 100GB | 建议 |
| 运行更大模型 | 8 核以上 | 32GB+ | 200GB+ | 强烈建议 |
如果你的服务器没有 GPU,也可以使用 CPU 推理,只是速度会慢一些。对于代码场景,可以优先选择较小但效果不错的代码模型。
2. 系统环境
本文以 Ubuntu 22.04 为例,其他 Linux 发行版也类似。
查看系统版本:
cat /etc/os-release
更新软件包:
sudo apt update
sudo apt upgrade -y
安装常用工具:
sudo apt install -y curl wget git vim unzip ca-certificates gnupg lsb-release
三、安装 Docker 和 Docker Compose
如果你已经安装了 Docker,可以跳过本节。
1. 安装 Docker
执行以下命令安装 Docker:
curl -fsSL https://get.docker.com | bash
启动 Docker 并设置开机自启:
sudo systemctl enable docker
sudo systemctl start docker
查看 Docker 版本:
docker version
2. 安装 Docker Compose
现在 Docker 官方已经将 Compose 作为插件集成到 Docker 中,你可以使用如下命令查看:
docker compose version
如果提示不存在,可以安装:
sudo apt install -y docker-compose-plugin
3. 配置当前用户免 sudo
如果你不希望每次执行 Docker 命令都加 sudo,可以执行:
sudo usermod -aG docker $USER
然后退出当前终端重新登录,验证:
docker ps
四、项目目录规划
建议将所有配置文件和数据统一放在一个目录中,例如:
mkdir -p ~/ai-coding-docker
cd ~/ai-coding-docker
目录结构如下:
ai-coding-docker/
├── docker-compose.yml
├── .env
├── nginx/
│ └── default.conf
├── data/
│ ├── ollama/
│ ├── open-webui/
│ └── code-server/
└── workspace/
说明:
docker-compose.yml:核心编排文件;.env:环境变量配置文件;nginx/default.conf:可选的反向代理配置;data/ollama:Ollama 模型和数据;data/open-webui:Open WebUI 数据;data/code-server:Code Server 配置;workspace:代码工作区。
创建目录:
mkdir -p nginx data/ollama data/open-webui data/code-server workspace
五、编写环境变量配置文件
在项目根目录创建 .env 文件:
vim .env
写入以下内容:
# Open WebUI 端口
OPEN_WEBUI_PORT=3000
# Code Server 端口
CODE_SERVER_PORT=8080
# Code Server 登录密码
CODE_SERVER_PASSWORD=ChangeYourStrongPassword
# 时区
TZ=Asia/Shanghai
# Ollama 模型数据目录
OLLAMA_MODELS=/root/.ollama
建议将 CODE_SERVER_PASSWORD 修改为强密码,例如包含大小写字母、数字和特殊字符。
六、编写 Docker Compose 配置文件
在项目根目录创建 docker-compose.yml:
vim docker-compose.yml
写入以下内容:
services:
ollama:
image: ollama/ollama:latest
container_name: ai-ollama
restart: unless-stopped
ports:
- "11434:11434"
environment:
- TZ=${TZ}
volumes:
- ./data/ollama:/root/.ollama
networks:
- ai-network
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: ai-open-webui
restart: unless-stopped
depends_on:
- ollama
ports:
- "${OPEN_WEBUI_PORT}:8080"
environment:
- TZ=${TZ}
- OLLAMA_BASE_URL=http://ollama:11434
- WEBUI_AUTH=true
volumes:
- ./data/open-webui:/app/backend/data
networks:
- ai-network
code-server:
image: lscr.io/linuxserver/code-server:latest
container_name: ai-code-server
restart: unless-stopped
ports:
- "${CODE_SERVER_PORT}:8443"
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ}
- PASSWORD=${CODE_SERVER_PASSWORD}
- DEFAULT_WORKSPACE=/config/workspace
volumes:
- ./data/code-server:/config
- ./workspace:/config/workspace
networks:
- ai-network
networks:
ai-network:
driver: bridge
这个配置文件中包含三个核心服务:
ollama:本地模型运行服务;open-webui:AI 聊天界面;code-server:浏览器版 VS Code。
七、启动服务
在项目目录下执行:
docker compose up -d
查看容器状态:
docker compose ps
如果看到类似结果,说明服务已经启动:
NAME IMAGE STATUS
ai-ollama ollama/ollama:latest Up
ai-open-webui ghcr.io/open-webui/open-webui:main Up
ai-code-server lscr.io/linuxserver/code-server:latest Up
查看日志:
docker compose logs -f
只查看某个服务日志:
docker compose logs -f open-webui
八、下载并运行 AI 编程模型
Ollama 容器启动后,还需要下载模型。可以进入容器执行:
docker exec -it ai-ollama bash
然后拉取模型,例如:
ollama pull qwen2.5-coder:7b
或者:
ollama pull deepseek-coder:6.7b
如果你的机器配置较低,可以选择更小的模型:
ollama pull qwen2.5-coder:1.5b
模型下载完成后测试运行:
ollama run qwen2.5-coder:7b
输入:
请用 Python 写一个快速排序函数,并解释时间复杂度。
如果模型正常返回代码和解释,说明 Ollama 工作正常。
退出模型对话可以输入:
/bye
退出容器:
exit
九、访问 Open WebUI
打开浏览器访问:
http://服务器IP:3000
第一次进入时需要注册管理员账号。注册完成后,Open WebUI 会自动连接 Docker 网络中的 Ollama 服务。
如果没有看到模型,可以进入 Open WebUI 的设置页面,确认 Ollama 地址是否为:
http://ollama:11434
如果你是从宿主机访问 Ollama,则地址通常是:
http://服务器IP:11434
但在 Docker Compose 内部服务之间通信,推荐使用服务名,也就是:
http://ollama:11434
十、访问 Code Server
浏览器访问:
http://服务器IP:8080
输入 .env 文件中配置的密码:
ChangeYourStrongPassword
登录后,你会看到一个类似 VS Code 的界面。默认工作区为:
/config/workspace
它实际映射到宿主机的:
~/ai-coding-docker/workspace
因此,你在浏览器里创建的代码文件,会保存在服务器本地目录中。
十一、在 Code Server 中接入 AI 编程能力
部署好 Code Server 后,可以通过安装插件的方式使用 AI 编程能力。常见方式有以下几种。
1. 使用 Continue 插件
Continue 是一个开源 AI 编程助手插件,可以连接 OpenAI、Ollama 等模型服务。
在 Code Server 中打开扩展市场,搜索:
Continue
如果无法直接从扩展市场安装,可以在宿主机下载 .vsix 文件后上传安装。
Continue 配置文件通常位于:
~/.continue/config.json
在 Code Server 容器中,实际路径可能是:
/config/.continue/config.json
可以创建配置:
{
"models": [
{
"title": "Qwen2.5 Coder 7B",
"provider": "ollama",
"model": "qwen2.5-coder:7b",
"apiBase": "http://ollama:11434"
}
],
"tabAutocompleteModel": {
"title": "Qwen2.5 Coder 7B",
"provider": "ollama",
"model": "qwen2.5-coder:7b",
"apiBase": "http://ollama:11434"
}
}
不过需要注意:Code Server 和 Ollama 在同一个 Docker 网络中时,插件是否能直接访问 http://ollama:11434,取决于插件运行环境。如果插件运行在浏览器端,可能无法解析 Docker 内部域名。更稳妥的做法是使用宿主机 IP:
{
"models": [
{
"title": "Qwen2.5 Coder 7B",
"provider": "ollama",
"model": "qwen2.5-coder:7b",
"apiBase": "http://服务器IP:11434"
}
]
}
如果你不希望暴露 11434 端口,可以通过 Nginx 反向代理或只允许内网访问。
十二、可选:添加 Nginx 反向代理
如果你希望通过域名访问,例如:
https://ai.example.com访问 Open WebUI;https://code.example.com访问 Code Server;
可以使用 Nginx 进行反向代理。
1. Nginx 配置文件示例
创建:
vim nginx/default.conf
写入:
server {
listen 80;
server_name ai.example.com;
client_max_body_size 100m;
location / {
proxy_pass http://open-webui:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
server {
listen 80;
server_name code.example.com;
client_max_body_size 100m;
location / {
proxy_pass http://code-server:8443;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
2. 修改 docker-compose.yml 添加 Nginx
可以在原有 Compose 文件中增加:
nginx:
image: nginx:latest
container_name: ai-nginx
restart: unless-stopped
depends_on:
- open-webui
- code-server
ports:
- "80:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
networks:
- ai-network
完整文件中需要保持 networks 一致。
3. 配置 HTTPS
生产环境建议使用 HTTPS。你可以选择:
- 使用宝塔面板申请证书;
- 使用 Nginx Proxy Manager;
- 使用 Certbot;
- 使用云厂商负载均衡 HTTPS 证书。
如果你更偏向 Docker 化管理,推荐使用 Nginx Proxy Manager,图形化配置更简单。
十三、带 GPU 的 Ollama 配置
如果你的服务器有 NVIDIA GPU,并且已经安装好显卡驱动和 NVIDIA Container Toolkit,可以让 Ollama 使用 GPU 加速。
1. 安装 NVIDIA Container Toolkit
Ubuntu 示例:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update
sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
验证 GPU 是否可用:
nvidia-smi
2. 修改 Ollama 服务配置
在 docker-compose.yml 的 ollama 服务中加入:
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
如果你的 Docker Compose 版本支持,也可以使用:
gpus: all
示例:
ollama:
image: ollama/ollama:latest
container_name: ai-ollama
restart: unless-stopped
ports:
- "11434:11434"
environment:
- TZ=${TZ}
volumes:
- ./data/ollama:/root/.ollama
gpus: all
networks:
- ai-network
重启服务:
docker compose down
docker compose up -d
查看 Ollama 日志:
docker logs -f ai-ollama
十四、常用运维命令
1. 启动服务
docker compose up -d
2. 停止服务
docker compose down
3. 重启服务
docker compose restart
4. 查看容器状态
docker compose ps
5. 查看实时日志
docker compose logs -f
6. 更新镜像
docker compose pull
docker compose up -d
7. 查看磁盘占用
docker system df
8. 清理无用镜像
docker image prune -a
注意:清理镜像前请确认没有误删仍需使用的镜像。
十五、数据备份与迁移
由于本文将核心数据都挂载到了宿主机目录,所以备份非常方便。主要需要备份:
data/
workspace/
docker-compose.yml
.env
nginx/
可以执行:
tar -czvf ai-coding-backup.tar.gz \
data workspace docker-compose.yml .env nginx
迁移到新服务器后,只需要安装 Docker,然后解压文件:
tar -xzvf ai-coding-backup.tar.gz
docker compose up -d
如果模型文件较大,备份包也会比较大。你也可以只备份配置和工作区,模型在新机器上重新拉取。
十六、安全建议
AI 编程环境通常会保存代码、密钥、接口文档等敏感内容,因此安全配置非常重要。
1. 不要使用弱密码
尤其是 Code Server,如果暴露到公网,必须使用强密码。不要使用:
123456
password
admin
建议使用随机密码生成器生成复杂密码。
2. 限制端口访问
如果你不希望所有人访问服务,可以使用防火墙限制 IP:
sudo ufw allow from 你的IP to any port 3000
sudo ufw allow from 你的IP to any port 8080
sudo ufw enable
3. 尽量使用 HTTPS
HTTP 明文传输存在被窃听风险。公网环境建议配置 HTTPS,尤其是 Code Server。
4. 不要把密钥直接提交到代码仓库
即使 AI 编程助手部署在私有环境中,也不要把数据库密码、云平台 Access Key、Token 等敏感信息写入代码仓库。
5. 定期更新镜像
建议定期执行:
docker compose pull
docker compose up -d
保持服务版本较新,降低安全风险。
十七、常见问题排查
问题 1:Open WebUI 无法连接 Ollama
检查容器是否正常:
docker compose ps
检查 Ollama 日志:
docker logs -f ai-ollama
确认 Open WebUI 环境变量:
OLLAMA_BASE_URL=http://ollama:11434
如果你修改过服务名,需要同步修改连接地址。
问题 2:模型下载速度很慢
模型文件通常较大,下载速度受网络影响。可以尝试:
- 更换网络环境;
- 使用服务器所在区域更好的线路;
- 先在本地下载后迁移模型目录;
- 选择体积较小的模型。
问题 3:Code Server 登录后空白
可以查看日志:
docker logs -f ai-code-server
确认端口是否映射正确:
ports:
- "8080:8443"
如果使用 Nginx 代理,需要确认 WebSocket 相关头部已经配置:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
问题 4:容器启动后自动退出
执行:
docker compose logs 服务名
例如:
docker compose logs code-server
常见原因包括:
- 端口被占用;
- 挂载目录权限不足;
- 环境变量写错;
- 镜像拉取不完整;
- 服务器内存不足。
查看端口占用:
sudo lsof -i:3000
sudo lsof -i:8080
sudo lsof -i:11434
问题 5:模型运行很慢
如果使用 CPU 推理,大模型响应慢是正常现象。可以尝试:
- 使用更小的模型,例如
qwen2.5-coder:1.5b; - 增加内存;
- 使用带 GPU 的服务器;
- 减少上下文长度;
- 避免同时多人调用。
十八、推荐模型选择
AI 编程场景建议优先选择代码能力较强的模型。以下是一些常见选择:
| 模型 | 适合场景 | 硬件要求 |
|---|---|---|
| qwen2.5-coder:1.5b | 轻量代码补全、简单解释 | 低 |
| qwen2.5-coder:7b | 日常开发、代码生成、Bug 排查 | 中 |
| deepseek-coder:6.7b | 代码生成、算法题、解释代码 | 中 |
| codellama:7b | 通用代码任务 | 中 |
| qwen2.5-coder:14b | 更复杂项目理解 | 较高 |
如果是个人服务器,建议从 qwen2.5-coder:7b 开始。如果机器配置较低,可以使用 1.5b 或其他小模型进行测试。
十九、完整 docker-compose.yml 示例
下面给出一个包含 Nginx 的完整版本,你可以根据需要使用。
services:
ollama:
image: ollama/ollama:latest
container_name: ai-ollama
restart: unless-stopped
ports:
- "11434:11434"
environment:
- TZ=${TZ}
volumes:
- ./data/ollama:/root/.ollama
networks:
- ai-network
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: ai-open-webui
restart: unless-stopped
depends_on:
- ollama
ports:
- "${OPEN_WEBUI_PORT}:8080"
environment:
- TZ=${TZ}
- OLLAMA_BASE_URL=http://ollama:11434
- WEBUI_AUTH=true
volumes:
- ./data/open-webui:/app/backend/data
networks:
- ai-network
code-server:
image: lscr.io/linuxserver/code-server:latest
container_name: ai-code-server
restart: unless-stopped
ports:
- "${CODE_SERVER_PORT}:8443"
environment:
- PUID=1000
- PGID=1000
- TZ=${TZ}
- PASSWORD=${CODE_SERVER_PASSWORD}
- DEFAULT_WORKSPACE=/config/workspace
volumes:
- ./data/code-server:/config
- ./workspace:/config/workspace
networks:
- ai-network
nginx:
image: nginx:latest
container_name: ai-nginx
restart: unless-stopped
depends_on:
- open-webui
- code-server
ports:
- "80:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
networks:
- ai-network
networks:
ai-network:
driver: bridge
二十、总结
通过本文的配置,你已经可以使用 Docker 快速部署一套完整的 AI 编程环境。它具备以下能力:
- 使用 Ollama 在本地运行代码大模型;
- 使用 Open WebUI 通过网页与 AI 对话;
- 使用 Code Server 在浏览器中编写代码;
- 使用 Docker Compose 统一管理服务;
- 支持后续扩展 Nginx、HTTPS、GPU 加速和更多插件。
这套方案的优点是结构清晰、部署简单、迁移方便,并且数据都保存在宿主机目录中,后期维护成本较低。对于个人开发者来说,它可以成为一个长期可用的私有 AI 编程工作台;对于小团队来说,也可以作为内部研发辅助平台的基础版本。
如果你是第一次部署,建议先不配置 Nginx 和 HTTPS,直接用 IP 加端口完成测试。确认 Ollama、Open WebUI、Code Server 都能正常运行后,再逐步增加域名、反向代理、安全策略和 GPU 加速。这样可以减少排错成本,也更容易定位问题。