群晖 DSM7 使用 Docker Compose 部署 NetBox 教程
群晖 DSM7 使用 Docker Compose 部署 NetBox 教程
适用场景:在群晖 DSM7 上通过 Docker Compose 部署 NetBox,参考本次
10.139.27.3群晖 SSH 操作记录整理。
目标访问地址示例:http://10.139.27.3:9999
本文已对原 SSH 记录中的密码、SECRET_KEY、数据库密码、Redis 密码、API Token 等敏感信息做脱敏处理。
0. 本次成功部署的关键信息
| 项目 | 本次记录 |
|---|---|
| 群晖地址 | 10.139.27.3 |
| SSH 用户 | bg4vrg |
| 部署目录 | /volume3/dockerconf/netbox |
| NetBox Web 外部端口 | 9999 |
| 容器内部端口 | 8080 |
| 访问地址 | http://10.139.27.3:9999 |
| NetBox 镜像 | docker.io/netboxcommunity/netbox:v4.6-5.0.1 |
| PostgreSQL 镜像 | docker.io/postgres:18-alpine |
| Redis/Cache 镜像 | docker.io/valkey/valkey:9.0-alpine |
| 管理员用户名 | suyu |
| 管理员密码 | 不写入文档,建议用 changepassword 重置 |
说明:原 SSH 日志里出现过明文密码和各种密钥。搭建教程里不要长期保存这些内容,生产环境也建议重新生成并妥善保存。
1. 准备工作
1.1 群晖套件
确认群晖已经安装并启用:
1 | Container Manager / Docker |
DSM 里开启 SSH:
1 | 控制面板 -> 终端机和 SNMP -> 启用 SSH 功能 |
1.2 SSH 登录群晖
从电脑使用 MobaXterm / Windows Terminal / Xshell 登录:
1 | ssh [email protected] |
切换 root:
1 | sudo -i |
2. 创建部署目录
本次成功部署目录是:
1 | /volume3/dockerconf/netbox |
创建目录:
1 | mkdir -p /volume3/dockerconf/netbox |
注意:不要放在
/root或非共享卷路径里。群晖升级或重启时,非共享目录里的数据存在不可控风险。
3. 获取 netbox-docker 项目文件
方案 A:群晖有 git
如果群晖已经有 git:
1 | cd /volume3/dockerconf/netbox |
这里最后的 . 表示直接把项目文件放到当前目录,也就是:
1 | /volume3/dockerconf/netbox |
这样后面直接在这个目录执行:
1 | docker compose ... |
方案 B:群晖没有 git
本次记录里曾出现过:
1 | -ash: git: command not found |
如果你的群晖也没有 git,可以在电脑上下载 netbox-docker 的 release 分支 ZIP,然后上传到:
1 | /volume3/dockerconf/netbox |
解压后确保目录里能看到这些文件:
1 | ls -lah /volume3/dockerconf/netbox |
正常应看到类似:
1 | docker-compose.yml |
如果解压后变成:
1 | /volume3/dockerconf/netbox/netbox-docker/docker-compose.yml |
可以进入子目录执行,也可以把里面内容移动到 /volume3/dockerconf/netbox 根目录。为了后续命令统一,推荐最终结构是:
1 | /volume3/dockerconf/netbox/docker-compose.yml |
4. 创建 docker-compose.override.yml
这是最关键的一步。不要手工在 vim 里一点点改,容易把 YAML 缩进弄坏。建议直接用 cat > 文件 <<'EOF' 的方式一次性写入。
进入目录:
1 | cd /volume3/dockerconf/netbox |
写入 override 文件:
1 | cat > docker-compose.override.yml <<'EOF' |
4.1 这段 YAML 的含义
1 | services: |
表示只覆盖 netbox 这个服务。
1 | ports: |
表示群晖 9999 端口映射到容器里的 8080。所以浏览器访问:
1 | http://10.139.27.3:9999 |
1 | healthcheck: |
表示启动后给 NetBox 300 秒初始化时间。首次启动时数据库迁移较慢,默认时间可能不够。
1 | environment: |
表示首次启动时尝试创建超级管理员。
注意:如果数据库已经存在,
SUPERUSER_PASSWORD不一定会修改已有用户密码。忘记密码时,优先用changepassword,不要靠反复改 YAML。
5. 检查 YAML 是否正确
执行:
1 | cd /volume3/dockerconf/netbox |
如果没有报错,说明 YAML 基本没问题。
之前踩过的典型错误有:
错误 1:ports 写成一行
错误写法:
1 | services: |
正确写法:
1 | services: |
错误 2:environment 放到根层级
错误写法:
1 | services: |
会报类似:
1 | Additional property environment is not allowed |
正确写法:
1 | services: |
错误 3:中文引号或隐藏字符
不要用:
1 | SUPERUSER_PASSWORD: “password” |
要用英文半角引号:
1 | SUPERUSER_PASSWORD: "password" |
6. 修复群晖 ACL / 权限问题
本次部署时,NetBox 容器曾经因为读不到配置目录而报错:
1 | PermissionError: [Errno 13] Permission denied: '/etc/netbox/config/' |
建议启动前直接修复权限:
1 | cd /volume3/dockerconf/netbox |
检查:
1 | ls -ld configuration |
正常应类似:
1 | drwxr-xr-x configuration |
7. 拉取镜像并启动
拉取镜像:
1 | cd /volume3/dockerconf/netbox |
启动:
1 | docker compose up -d |
首次启动需要等待数据库初始化和迁移,可能需要几分钟。
查看状态:
1 | docker compose ps |
查看日志:
1 | docker compose logs -f netbox |
如果看到大量:
1 | Applying xxx. OK |
说明数据库迁移正在进行,不要急着重启。
8. 判断是否启动成功
执行:
1 | docker compose ps |
理想状态:
1 | netbox-postgres-1 running |
本次记录里最终出现过:
1 | Container netbox-netbox-1 Healthy |
这就是成功标志。
浏览器访问:
1 | http://10.139.27.3:9999 |
9. 创建或重置管理员账号
9.1 首次创建管理员
如果环境变量没有自动创建用户,执行:
1 | cd /volume3/dockerconf/netbox |
按提示输入用户名、邮箱、密码。
建议用户名:
1 | suyu |
9.2 忘记密码时重置
如果已经有 suyu 用户,但忘记密码:
1 | cd /volume3/dockerconf/netbox |
如果不确定有哪些用户:
1 | docker compose exec netbox /opt/netbox/netbox/manage.py shell -c "from django.contrib.auth import get_user_model; U=get_user_model(); print(list(U.objects.values_list('username','is_superuser','is_active')))" |
10. 常用运维命令
查看容器状态
1 | cd /volume3/dockerconf/netbox |
查看 NetBox 日志
1 | docker compose logs --tail=200 netbox |
实时跟踪:
1 | docker compose logs -f netbox |
重启 NetBox Web
1 | docker compose restart netbox |
重启全部服务
1 | docker compose restart |
停止服务
1 | docker compose stop |
启动服务
1 | docker compose up -d |
11. 备份与恢复
11.1 备份数据库
创建备份目录:
1 | mkdir -p /volume3/dockerconf/netbox/backup |
导出 PostgreSQL:
1 | cd /volume3/dockerconf/netbox |
11.2 备份配置文件
1 | cd /volume3/dockerconf |
11.3 千万不要随便执行
不要执行:
1 | docker compose down -v |
-v 会删除 volume,可能导致 PostgreSQL 数据库、媒体文件等被删除。
如果只是停止容器,用:
1 | docker compose down |
或者:
1 | docker compose stop |
12. 后续升级建议
升级前先备份:
1 | cd /volume3/dockerconf/netbox |
再拉取新镜像:
1 | docker compose pull |
观察日志:
1 | docker compose logs -f netbox |
等 netbox-netbox-1 变成 healthy 再访问页面。
13. 本次踩坑复盘
13.1 目录写错
曾经尝试:
1 | cd /dockerconf/netbox |
但实际目录是:
1 | cd /volume3/dockerconf/netbox |
13.2 群晖没有 nano
日志里出现过:
1 | -ash: nano: command not found |
所以建议使用:
1 | cat > docker-compose.override.yml <<'EOF' |
这样比 vim 手改更稳。
13.3 YAML 缩进错误
错误写法:
1 | services: |
正确写法:
1 | services: |
13.4 environment 层级错误
错误写法会导致:
1 | Additional property environment is not allowed |
environment 必须放在:
1 | services: |
下面。
13.5 群晖 ACL 权限导致容器读不到配置
错误:
1 | PermissionError: [Errno 13] Permission denied: '/etc/netbox/config/' |
解决:
1 | cd /volume3/dockerconf/netbox |
13.6 首次启动时间不够
首次数据库迁移比较慢,如果 healthcheck 太早判定失败,会出现 unhealthy。建议:
1 | healthcheck: |
14. 最终推荐 docker-compose.override.yml
下面是推荐保留版,敏感信息请自行替换:
1 | services: |
15. 部署完成后的 NetBox 资产导入注意事项
你后续资产导入已经约定:
1 | CSV 必须 UTF-8 with BOM |
推荐资产基础数据导入顺序:
1 | 1. Region / 地区 |
16. 一句话版流程
1 | ssh [email protected] |
访问:
1 | http://10.139.27.3:9999 |
群晖 DSM7 使用 Docker Compose 部署 NetBox 教程

