# 2026-06-06 — Docker .env 持久化与 entrypoint 覆盖修复 ## 摘要 修复 1Panel 安装向导完成后 `nx update`/容器重启导致 `nexus-state` 卷内 `.env` 缺少 `NEXUS_DATABASE_URL`、应用连 `127.0.0.1` 崩溃的问题。 ## 动机 - `init-db` 仅写 `/app/.env`,卷同步依赖容器 EXIT trap,重建容器时 `restore_persisted_env` 可能恢复 entrypoint 生成的简版 env。 - `write_env_from_environment` 在 `NEXUS_INSTALL_WIZARD_PENDING=0` 时用 `env | grep NEXUS_` 写卷,Compose 无 `NEXUS_DATABASE_URL`。 ## 涉及文件 - `server/api/install.py` — `_sync_env_to_persist_volume`;`init-db` / Redis 修补 / lock 后立即同步卷 - `docker/entrypoint.sh` — 无 `NEXUS_DATABASE_URL` 的卷不 restore;无 `NEXUS_DATABASE_URL` 环境变量时不生成 `.env`;`export_app_env` 在启动前 source `/app/.env`,使向导写入的 `DATABASE_URL` / `REDIS_URL` 覆盖 Compose 占位符 ## 迁移 / 重启 已损坏的卷内 `.env` 需手工补全 `NEXUS_DATABASE_URL` 与 Redis URL 后 `docker start`;新装/重装向导自动同步。 ## 验证 ```bash .venv/bin/pytest tests/test_security_unit.py -q # 向导 init-db 后: docker exec nexus-prod-nexus-1 grep NEXUS_DATABASE_URL /var/lib/nexus/.env ```