gogdns
GOGDNS是一款简易的私人DNS服务器
2.8K
一款简易的私人 DNS 服务器
注:可能需要手动禁用dnsmasq与systemd-resolved或转发相关端口数据。
GOGDNS 需要绑定宿主机的 53 端口。如果系统提示端口已被占用,请先检查并处理:
# 检查占用 53 端口的进程
sudo lsof -i :53
# 若为 systemd-resolved 占用,可修改 /etc/systemd/resolved.conf
# 将 DNSStubListener 设置为 no,然后重启服务:
sudo systemctl restart systemd-resolved
建议在部署前执行以确保挂载目录存在
sudo mkdir -p /opt/gogdns
docker run -d \
--name gogdns \
--restart unless-stopped \
--network host \
--cap-add=NET_BIND_SERVICE \
--cap-add=NET_ADMIN \
-e TZ=Asia/Shanghai \
-e GOGDNS_BASE_PATH=/gogdns/workstation \
-v /var/run/docker.sock:/var/run/docker.sock:ro \
-v /opt/gogdns:/gogdns/workstation \
billghifun/gogdns:latest
参数详细说明:
-d: 后台运行容器。
--network host: 使用宿主机网络。这对 DNS 服务至关重要,可避免 NAT 转换导致的源 IP 丢失。
--cap-add=NET_BIND_SERVICE: 允许绑定宿主机 53 端口。
--cap-add=NET_ADMIN: 提供必要的网络管理权限。
-v /var/run/docker.sock:/var/run/docker.sock:ro: 允许读取宿主机容器状态,实现自动化解析。
-v /opt/gogdns:/gogdns/workstation: 数据持久化目录,确保重启后配置不丢失。
创建文件docker-compose.yml
services:
gogdns:
image: billghifun/gogdns:latest # 镜像名称
container_name: gogdns # 容器名称
restart: unless-stopped # 自动重启
# 权限优化:精简 Capability
cap_add:
- NET_BIND_SERVICE # 网络管理权限 允许绑定 53 低位端口
- NET_ADMIN # 如果不需要在容器内修改宿主机路由表,可以尝试去掉 NET_ADMIN 以增强安全性
# 网络模式
network_mode: host # DNS 服务使用 host 模式性能最高,且避免了 NAT 转换带来的源 IP 丢失
# 环境变量
environment:
- TZ=Asia/Shanghai # 推荐通过环境变量传递时区,配合 Dockerfile 中的 tzdata
- GOGDNS_BASE_PATH=/gogdns/workstation # 环境变量设置基础路径
# 存储卷优化
volumes:
# Docker 守护进程访问
- /var/run/docker.sock:/var/run/docker.sock:ro # 建议设为只读 (ro)
# 数据目录映射
# 注意:宿主机路径建议使用绝对路径/path/gogdns
# 需要用户自行确认目录/path/gogdns存在
- /opt/gogdns:/gogdns/workstation
执行部署
docker-compose up -d
Content type
Image
Digest
sha256:69eea970f…
Size
11.5 MB
Last updated
17 days ago
docker pull billghifun/gogdns