sha*_*aki 2 locking nexus sonatype
我在 docker 容器内运行 Sonatype Nexus 3,使用以下启动命令:
docker run -d -p 80:8081 --ulimit nofile=65536:65536 --name nexus -v nexus-data:/nexus-data -e INSTALL4J_ADD_VM_PARAMS="-Xms4g -Xmx4g -XX:MaxDirectMemorySize=6717m -Djava.util.prefs.userRoot=${NEXUS_DATA}/javaprefs" sonatype/nexus3
Run Code Online (Sandbox Code Playgroud)
将 docker 镜像版本从 3.30.0 更新到 3.40.1 后,我不断收到以下有关用户首选项的警告。
2022-07-18 13:14:45,860+0000 WARN [Timer-0] *SYSTEM java.util.prefs - Couldn't flush user prefs: java.util.prefs.BackingStoreException: Couldn't get file lock.
2022-07-18 13:15:15,860+0000 WARN [Timer-0] *SYSTEM java.util.prefs - Could not lock User prefs. Unix error code 2.
Run Code Online (Sandbox Code Playgroud)
从启动命令中可以看到,用户 prefs 目录位于 docker 卷内的目录 /nexus-data/javaprefs 。我尝试在目录内查找现有的锁,但没有找到。我还尝试完全删除该目录,发现警告仍然出现,并且该文件夹本身并不是由 Nexus 创建的。
老实说,我什至不知道这是否是一个重要问题,因为几乎没有关于用户首选项文件夹的文档。
即使是关闭每 30 秒触发一次的警告日志的方法也会很有用。
- - 更新 - -
我尝试按照 github sonatype nexus3 docker 存储库中的简单说明通过 Docker 进行 Nexus 的全新安装,但仍然发现这些警告。
我什至尝试了不同的操作系统(Windwos 而不是 Linux,通过 Docker Desktop)以及有或没有 /nexus-data 卷。
目前我认为这是较新 Nexus 版本中的一个错误。
小智 6
TLDR:添加-Djava.util.prefs.userRoot=/nexus-data/javaprefs
应该可以解决问题,假设 Nexus 数据目录位于/nexus-data/
.
3.38.1
从 升级到后遇到了同样的问题3.42.0
。经过一番调查后发现,该java.util.prefs.userRoot
财产确实在这些版本之间的某个地方丢失了。原生 Nexus 中的默认3.38.1
值为/nexus-data/javaprefs
。