创建Nexus仓库Windows容器启动时报找不到指定文件错误如何解决
错误原因分析
- 路径配置无效:
RUN cd "c:\\nexus\\nexus-3.36.0-01\\bin"指令不会生效。Docker 中每一条 RUN 指令都在独立的子进程中执行,执行完成后子进程退出,工作目录不会被继承到后续指令中,CMD 执行时的工作目录依然是之前设置的c:/nexus,系统在当前路径下找不到nexus.exe就会抛出找不到文件的错误。 - 缺少运行依赖:Nexus 3 运行依赖 Java 8/11 运行环境,你使用的 Windows Nano Server 基础镜像默认没有预装 JRE,即使路径配置正确也会缺少运行依赖无法启动。
- 启动参数缺失:默认直接执行
nexus.exe会让程序后台运行,容器检测不到前台进程会直接退出,且没有指定绝对路径也会提升找不到文件的概率。
解决方案
修改后的 Dockerfile 参考如下:
FROM mcr.microsoft.com/windows/nanoserver:1909 # 预装OpenJDK11运行环境,也可以自行拷贝本地JRE到镜像内配置环境变量 RUN curl -L -o openjdk11.zip https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.11%2B9/OpenJDK11U-jre_x64_windows_hotspot_11.0.11_9.zip && \ tar -xf openjdk11.zip && \ move jdk-11.0.11+9-jre c:\jre && \ setx PATH "%PATH%;c:\jre\bin" && \ del openjdk11.zip WORKDIR c:/nexus RUN mkdir "sonatype-work" RUN mkdir "nexus-3.36.0-01" COPY nexus-3.36.0-01 "nexus-3.36.0-01" COPY sonatype-work "sonatype-work" # 用WORKDIR全局切换工作目录到nexus二进制文件所在路径 WORKDIR c:/nexus/nexus-3.36.0-01/bin EXPOSE 8081 # 加/run参数让nexus前台运行,避免容器直接退出 CMD ["nexus.exe", "/run"]
你也可以先通过交互模式启动容器验证配置是否正常:
执行 docker run -it --rm myself/nexus cmd 进入容器后,分别运行 where nexus.exe 和 java -version 确认路径和Java环境配置正常后,再用后台模式启动容器即可。
内容的提问来源于stack exchange,提问作者debasree sarkar
相关产品推荐
相关产品推荐

