
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
本仓库包含将NetBox构建为Docker容器所需的组件。使用此代码构建的镜像每晚发布至https://hub.docker.com/r/ninech/netbox/tags/。
有疑问?在GitHub上提交issue前,请加入Network To Code并在#netbox-docker频道寻求帮助。
如需启动NetBox:
bash$ git clone -b master https://github.com/ninech/netbox-docker.git $ cd netbox-docker $ docker-compose pull $ docker-compose up -d
几分钟后应用即可使用。使用docker-compose port nginx 8080查看连接地址:
bash$ echo "http://$(docker-compose port nginx 8080)/" http://0.0.0.0:32768/ # 在macOS上用默认浏览器打开netbox: $ open "http://$(docker-compose port nginx 8080)/" # 在大多数Linux系统上用默认浏览器打开netbox: $ xdg-open "http://$(docker-compose port nginx 8080)/" &>/dev/null &
或者,使用https://github.com/ninech/reception连接到docker-compose项目。
默认凭据:
本项目仅依赖Docker和docker-compose,需满足以下要求:
1.13.01.10.0可通过docker --version和docker-compose --version命令检查版本是否符合要求。
可通过环境变量配置应用,这些变量定义在netbox.env中。参考Compose中的环境变量了解覆盖这些变量的多种方式(最简单的方法是直接修改该文件)。
所有可能的变量可查看https://github.com/ninech/netbox-docker/blob/master/docker/configuration.docker.py和https://github.com/ninech/netbox-docker/blob/master/docker/docker-entrypoint.sh文件。通常,环境变量与NetBox配置变量同名。数组类型的变量通常通过空格分隔多个值,例如ALLOWED_HOSTS=localhost ::1 127.0.0.1允许通过http://localhost:8080、http://[::1]:8080和http://127.0.0.1:8080访问NetBox。
默认设置针对(本地)开发环境优化,生产环境需调整配置,至少修改以下变量:
ALLOWED_HOSTS:添加所有指向NetBox实例的URL,空格分隔。例如ALLOWED_HOSTS=netbox.mycorp.com server042.mycorp.com 2a02:123::42 10.0.0.42 localhost ::1 127.0.0.1(建议始终允许本地连接以便调试,即localhost ::1 127.0.0.1)DB_*:使用自己的持久化数据库,不要使用默认密码!EMAIL_*:使用自己的邮件服务器MAX_PAGE_SIZE:建议使用默认值1000SUPERUSER_*:仅在初始设置时定义,数据库设置完成后删除,不要使用默认密码!REDIS_*:使用自己的持久化Redis,不要使用默认密码!可在Docker Swarm、Kubernetes或OpenShift等集群中运行此镜像,但这属于高级用法。
建议通过容器平台提供的机制(如Docker Swarm配置、Kubernetes ConfigMap、OpenShift ConfigMaps),从https://github.com/digitalocean/netbox/blob/develop/netbox/netbox/configuration.example.py开始静态配置NetBox,并将其挂载到容器的/etc/netbox/config/目录。
若仍希望通过环境变量配置,可继续使用https://github.com/ninech/netbox-docker/blob/master/docker/configuration.docker.py。但不建议在环境变量中存储密钥,因为环境变量会传递给所有子进程,可能轻易泄露到其他系统(如错误收集工具常收集所有环境变量)。
因此,强烈建议使用容器平台提供的密钥机制(如Docker Swarm密钥、Kubernetes密钥、OpenShift密钥)。https://github.com/ninech/netbox-docker/blob/master/docker/configuration.docker.py和https://github.com/ninech/netbox-docker/blob/master/docker/docker-entrypoint.sh尝试从以下文件加载密钥:若环境变量和对应文件同时定义密钥,以环境变量值为准。
SUPERUSER_PASSWORD:/run/secrets/superuser_passwordSUPERUSER_API_TOKEN:/run/secrets/superuser_api_tokenDB_PASSWORD:/run/secrets/db_passwordSECRET_KEY:/run/secrets/secret_keyEMAIL_PASSWORD:/run/secrets/email_passwordNAPALM_PASSWORD:/run/secrets/napalm_passwordREDIS_PASSWORD:/run/secrets/redis_password同时请参考上述生产环境运行建议!
自v2.1.0起,NAPALM已与NetBox深度集成。NAPALM允许NetBox从设备获取实时数据并通过REST API返回给请求者。了解NAPALM及其工作原理,可参考NAPALM文档或NetBox集成文档。
如需启用此功能,在netbox.env(或相应密钥机制)中配置以下变量:
NAPALM_USERNAME:用于连接网络设备的通用用户名NAPALM_PASSWORD:与用户名配合使用的密码NAPALM_TIMEOUT:连接设备超时时间(无响应时)若不需要此功能,保持这些变量为空即可。
NetBox包含自定义报告功能,允许用户编写Python代码验证NetBox中的数据有效性。REPORTS_ROOT变量映射到容器内的/reports/目录,包含文档中的devices.py示例,但已重命名为devices.py.example以避免默认报告不满足预期时产生问题。
如需启用默认报告,将devices.py.example重命名为devices.py,然后在WebUI中访问/extras/reports/。也可动态添加其他报告到此目录,NetBox无需重启即可识别。
使用docker-compose时,/opt/netbox/startup_scripts中的所有Python脚本将在应用启动后以./manage.py上下文自动执行。
此机制可用于多种场景,例如创建NetBox自定义字段:
python# docker/startup_scripts/load_custom_fields.py from django.contrib.contenttypes.models import ContentType from extras.models import CF_TYPE_TEXT, CustomField from dcim.models import Device from dcim.models import DeviceType device = ContentType.objects.get_for_model(Device) device_type = ContentType.objects.get_for_model(DeviceType) my_custom_field, created = CustomField.objects.get_or_create( type=CF_TYPE_TEXT, name='my_custom_field', description='我的自定义字段' ) if created: my_custom_field.obj_type.add(device) my_custom_field.obj_type.add(device_type)
初始化器
初始化器是内置的启动脚本,用于定义NetBox自定义字段、组、用户等资源。只需挂载自己的initializers文件夹(https://github.com/ninech/netbox-docker/blob/master/docker-compose.yml)。参考https://github.com/ninech/netbox-docker/tree/master/initializers了解文件格式。
自定义字段定义示例:
yaml# initializers/custom_fields.yml text_field: type: text label: 自定义文本 description: 在文本字段中输入文本 required: false filter_logic: loose weight: 0 on_objects: - dcim.models.Device - dcim.models.Rack - ipam.models.IPAddress - ipam.models.Prefix - tenancy.models.Tenant - virtualization.models.VirtualMachine
用户/组初始化器的可用权限组
获取最新可用权限列表,运行以下命令:
bash# 确保'netbox'容器已运行!不确定可运行`docker-compose up -d` echo "from django.contrib.auth.models import Permission\nfor p in Permission.objects.all():\n print(p.codename);" | docker-compose exec -T netbox ./manage.py shell
自定义Docker镜像
也可构建包含自定义启动脚本、自定义字段、用户和组的NetBox Docker镜像:
dockerfileARG VERSION=latest FROM ninech/netbox:$VERSION COPY startup_scripts/ /opt/netbox/startup_scripts/ COPY initializers/ /opt/netbox/initializers/
docker-compose.yml文件已配置为运行特定版本的NetBox。如需使用此功能,在启动docker-compose前设置环境变量VERSION,VERSION可设为https://hub.docker.com/r/ninech/netbox/tags/:
bash$ export VERSION=v2.2.6 $ docker-compose pull netbox $ docker-compose up -d
也可构建特定版本的NetBox镜像。此时VERSION表示https://github.com/digitalocean/netbox/releases上的任何有效Git引用,通常为标签或分支名:
bash$ export VERSION=develop $ docker-compose build --no-cache netbox $ docker-compose up -d
提示:若按标签名构建特定版本,--no-cache参数并非必需,可加快配置调整时的构建速度。
标记为“-ldap”的镜像包含用于LDAP或Active Directory服务器认证的所有必要组件。默认配置ldap_config.py适用于Active Directory服务器。可通过环境变量注入自定义值,与主要配置机制类似。
本节收集常见问题及解决方法。若问题未列出,可查看现有issues或创建新issue。
docker-compose ps查看项目所有运行容器docker-compose logs -f查看日志,docker-compose logs -f netbox仅显示netbox日志docker-compose stop停止所有服务docker-compose down -v --remove-orphans清理所有资源(将删除所有相关数据)docker-compose exec netbox /bin/bash进入运行中的NetBox容器shell,可访问./manage.py(如重置密码)docker-compose exec postgres sh -c 'psql -U $POSTGRES_USER $POSTGRES_DB'docker-compose exec postgres sh -c 'pg_dump -cU $POSTGRES_USER $POSTGRES_DB' | gzip > db_dump.sql.gzgunzip -c db_dump.sql.gz | docker exec -i $(docker-compose ps -q postgres) sh -c 'psql -U $POSTGRES_USER $POSTGRES_DB'首先停止docker-compose设置,然后找到并删除netbox-nginx-config卷:
bash# 停止本地netbox-docker安装 $ docker-compose down # 查找卷 $ docker volume ls | grep netbox-nginx-config local netbox-docker_netbox-nginx-config # 删除卷 $ docker volume rm netbox-docker_netbox-nginx-config netbox-docker_netbox-nginx-config
然后重新启动。若问题仍存在,查看日志:
bash$ docker-compose logs -f nginx
连接NetBox实例时出现“Bad Request (400)”错误。
通常是ALLOWED_HOSTS变量设置不正确导致。
如何更新到新版本的netbox?
拉取最新镜像、停止并重启容器即可:
bashdocker-compose pull netbox docker-compose stop netbox netbox-worker docker-compose rm -f netbox netbox-worker docker-compose up -d netbox netbox-worker
首先确保Webhooks功能已启用且定义了Redis主机。检查netbox.env是否定义以下变量:
WEBHOOKS_ENABLED=true REDIS_HOST=redis
然后确保redis容器和至少一个netbox-worker正在运行:
bash# 检查容器状态 $ docker-compose ps Name Command State Ports -------------------------------------------------------------------------------------------------------- netbox-docker_netbox-worker_1 /opt/netbox/docker-entrypo ... Up netbox-docker_netbox_1 /opt/netbox/docker-entrypo ... Up netbox-docker_nginx_1 nginx -c /etc/netbox-nginx ... Up 80/tcp, 0.0.0.0:32776->8080/tcp netbox-docker_postgres_1 docker-entrypoint.sh postgres Up 5432/tcp netbox-docker_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp # 连接Redis并发送PING命令: $ docker-compose run --rm -T redis sh -c 'redis-cli -h redis -a $REDIS_PASSWORD ping' Warning: Using a password with '-a' option on the command line interface may not be safe. PONG
若redis和netbox-worker不可用,确保已更新docker-compose.yml文件!
若所有服务正常运行,检查netbox-worker和/或redis日志:
bashdocker-compose logs -f netbox-worker docker-compose logs -f redis
仍无法解决,可连接redis容器监控执行的命令:
bashdocker-compose run --rm -T redis sh -c 'redis-cli -h redis -a $REDIS_PASSWORD monitor' # 按多次CTRL-C退出
触发Webhook后无任何输出,需检查netbox和netbox-worker容器配置及NetBox管理界面中的Webhook配置。
有时需要重新设计此设置结构,可能导致docker-compose.yml或Kubernetes/OpenShift配置需调整。自2018年4月起,从此仓库构建的每个镜像均包含NETBOX_DOCKER_PROJECT_VERSION标签。可通过docker inspect ninech/netbox:v2.3.1 --format "{{json .ContainerConfig.Labels}}"查看本地镜像标签,与以下列表比较是否存在重大变更:
MAX_PAGE_SIZE环境变量值改为NetBox默认值1000*.env移至/env文件夹docker-compose.yml中添加Redis和netbox-workerfilterable: <boolean替换为`filter您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 haji/netbox 相关的常用 Docker 镜像,适用于 不同场景 等不同场景: