Docker 部署
本文档介绍如何使用 Docker 部署 DNS-Go 服务。
前置条件
- 安装 Docker 20.10+
- 了解基本的 Docker 操作
- 已完成环境要求检查
快速开始
1. 拉取镜像
bash
# 从腾讯云镜像仓库拉取
docker pull ccr.ccs.tencentyun.com/liumou/dns-go:latest
# 或从其他镜像源
docker pull liumou/dns-go:latest2. 准备配置文件
创建配置目录和配置文件:
bash
mkdir -p /opt/dns-go/config
mkdir -p /opt/dns-go/data
mkdir -p /opt/dns-go/logs
# 下载配置文件模板
curl -o /opt/dns-go/config/config.toml \
https://gitee.com/liumou_site/dns-go/raw/master/vitepress/public/config.example.toml编辑配置文件:
bash
vim /opt/dns-go/config/config.toml修改以下关键配置:
toml
[database]
driver = "postgres"
host = "your-db-host" # 数据库主机地址
port = 5432
username = "dnsgo"
password = "your_secure_password" # 修改密码
database = "dns_go"
[jwt]
secret_key = "your_jwt_secret_key_min_32_chars" # 修改密钥
expires_in = 24
[valkey]
ip = "your-cache-host" # 缓存主机地址
port = 6379
password = ""3. 运行容器
bash
docker run -d \
--name dns-go \
--restart unless-stopped \
-p 8085:8085 \
-p 53:53/udp \
-p 53:53/tcp \
-v /opt/dns-go/config:/app/config \
-v /opt/dns-go/data:/app/data \
-v /opt/dns-go/logs:/app/logs \
-e DB_HOST=your-db-host \
-e DB_PORT=5432 \
-e DB_USER=dnsgo \
-e DB_PASSWORD=your_password \
-e DB_NAME=dns_go \
ccr.ccs.tencentyun.com/liumou/dns-go:latest4. 验证部署
bash
# 查看容器状态
docker ps | grep dns-go
# 查看日志
docker logs -f dns-go
# 访问 Web 界面
open http://localhost:8085默认账号:admin / admin123
高级配置
使用 Docker Network
创建专用网络,与其他服务通信:
bash
# 创建网络
docker network create dns-go-network
# 运行容器
docker run -d \
--name dns-go \
--network dns-go-network \
-p 8085:8085 \
-p 53:53/udp \
-p 53:53/tcp \
-v /opt/dns-go/config:/app/config \
ccr.ccs.tencentyun.com/liumou/dns-go:latest环境变量配置
支持通过环境变量覆盖配置文件:
| 环境变量 | 说明 | 示例 |
|---|---|---|
DB_HOST | 数据库主机 | postgres |
DB_PORT | 数据库端口 | 5432 |
DB_USER | 数据库用户 | dnsgo |
DB_PASSWORD | 数据库密码 | your_password |
DB_NAME | 数据库名称 | dns_go |
CACHE_HOST | 缓存主机 | valkey |
CACHE_PORT | 缓存端口 | 6379 |
CACHE_PASSWORD | 缓存密码 | `` |
JWT_SECRET_KEY | JWT 密钥 | your_secret |
资源限制
限制容器资源使用:
bash
docker run -d \
--name dns-go \
--memory=512m \
--memory-swap=1g \
--cpus=1.0 \
-p 8085:8085 \
-p 53:53/udp \
-p 53:53/tcp \
ccr.ccs.tencentyun.com/liumou/dns-go:latest健康检查
配置容器健康检查:
bash
docker run -d \
--name dns-go \
--health-cmd="curl -f http://localhost:8085/api/health || exit 1" \
--health-interval=30s \
--health-timeout=10s \
--health-retries=3 \
--health-start-period=40s \
ccr.ccs.tencentyun.com/liumou/dns-go:latest常用操作
查看日志
bash
# 实时查看日志
docker logs -f dns-go
# 查看最近 100 行
docker logs --tail 100 dns-go
# 查看特定时间段的日志
docker logs --since "2025-01-15T10:00:00" dns-go进入容器
bash
# 进入容器 shell
docker exec -it dns-go /bin/sh
# 查看配置文件
docker exec dns-go cat /app/config/config.toml重启服务
bash
# 重启容器
docker restart dns-go
# 停止容器
docker stop dns-go
# 启动容器
docker start dns-go更新版本
bash
# 1. 拉取最新镜像
docker pull ccr.ccs.tencentyun.com/liumou/dns-go:latest
# 2. 停止旧容器
docker stop dns-go
# 3. 备份数据(可选)
cp -r /opt/dns-go/data /opt/dns-go/data.backup
# 4. 删除旧容器
docker rm dns-go
# 5. 运行新容器
docker run -d \
--name dns-go \
--restart unless-stopped \
-p 8085:8085 \
-p 53:53/udp \
-p 53:53/tcp \
-v /opt/dns-go/config:/app/config \
-v /opt/dns-go/data:/app/data \
-v /opt/dns-go/logs:/app/logs \
ccr.ccs.tencentyun.com/liumou/dns-go:latest
# 6. 验证新版本
docker logs dns-go备份和恢复
备份:
bash
# 备份配置文件
cp -r /opt/dns-go/config /backup/dns-go-config-$(date +%Y%m%d)
# 备份数据目录
cp -r /opt/dns-go/data /backup/dns-go-data-$(date +%Y%m%d)
# 备份数据库(如果数据库也是容器)
docker exec postgres pg_dump -U dnsgo dns_go > /backup/dns-go-db-$(date +%Y%m%d).sql恢复:
bash
# 恢复配置文件
cp -r /backup/dns-go-config-20250115 /opt/dns-go/config
# 恢复数据目录
cp -r /backup/dns-go-data-20250115 /opt/dns-go/data
# 恢复数据库
docker exec -i postgres psql -U dnsgo dns_go < /backup/dns-go-db-20250115.sql
# 重启容器
docker restart dns-go多容器部署
与 PostgreSQL 容器一起部署
bash
# 创建网络
docker network create dns-go-network
# 运行 PostgreSQL
docker run -d \
--name postgres \
--network dns-go-network \
-e POSTGRES_USER=dnsgo \
-e POSTGRES_PASSWORD=your_password \
-e POSTGRES_DB=dns_go \
-v /opt/postgres/data:/var/lib/postgresql/data \
postgres:16-alpine
# 运行 DNS-Go
docker run -d \
--name dns-go \
--network dns-go-network \
-p 8085:8085 \
-p 53:53/udp \
-p 53:53/tcp \
-e DB_HOST=postgres \
-e DB_PASSWORD=your_password \
ccr.ccs.tencentyun.com/liumou/dns-go:latest与 Valkey 容器一起部署
bash
# 运行 Valkey
docker run -d \
--name valkey \
--network dns-go-network \
-v /opt/valkey/data:/data \
valkey/valkey:8-alpine
# 运行 DNS-Go(连接到 PostgreSQL 和 Valkey)
docker run -d \
--name dns-go \
--network dns-go-network \
-p 8085:8085 \
-p 53:53/udp \
-p 53:53/tcp \
-e DB_HOST=postgres \
-e DB_PASSWORD=your_password \
-e CACHE_HOST=valkey \
ccr.ccs.tencentyun.com/liumou/dns-go:latest故障排查
容器无法启动
bash
# 查看容器日志
docker logs dns-go
# 检查端口占用
sudo netstat -tlnp | grep -E '8085|53'
# 检查配置文件
docker exec dns-go cat /app/config/config.toml数据库连接失败
bash
# 检查数据库容器状态
docker ps | grep postgres
# 测试数据库连接
docker exec dns-go nc -zv postgres 5432
# 查看数据库日志
docker logs postgres53 端口绑定失败
bash
# 检查宿主机 53 端口占用
sudo lsof -i :53
# 如果 systemd-resolved 占用,停止它
sudo systemctl stop systemd-resolved
# 或使用特权模式运行
docker run -d --privileged ...相关文档
- Docker Compose 部署 - 更简单的多容器部署
- 环境要求 - 了解部署前的准备工作
- 二进制部署 - 不使用 Docker 的部署方式