执行docker build时ADD *.jar报错:未指定源文件
Docker构建镜像时ADD指令找不到JAR文件报错
执行docker build src/main/docker/构建Docker镜像时,Dockerfile第8步ADD *.jar contourservice.jar执行失败,收到守护进程错误:
Error response from daemon: ADD failed: no source files were specified
相关文件内容
Dockerfile
FROM openjdk:11-jre-slim ENV SPRING_OUTPUT_ANSI_ENABLED=ALWAYS \ JHIPSTER_SLEEP=0 \ JAVA_OPTS="" # 添加jhipster用户以非root身份运行应用 RUN adduser --disabled-login --shell /bin/sh --gecos "" jhipster WORKDIR /home/jhipster ADD entrypoint.sh entrypoint.sh RUN chmod 755 entrypoint.sh && chown jhipster:jhipster entrypoint.sh USER jhipster ADD *.jar contourservice.jar ENTRYPOINT ["./entrypoint.sh"] EXPOSE 8084
entrypoint.sh
#!/bin/sh echo "The application will start in ${JHIPSTER_SLEEP}s..." && sleep "${JHIPSTER_SLEEP}" exec java "${JAVA_OPTS}" -Djava.security.egd=file:/dev/./urandom -jar "${HOME}/contourservice.jar" "$@"
控制台输出
Step 8/10 : ADD *.jar contourservice.jar
Error response from daemon: ADD failed: no source files were specified
项目目录结构

问题原因
执行docker build src/main/docker/时,Docker的构建上下文被限定为src/main/docker/目录,而项目编译生成的JAR文件存放在项目根目录的target/文件夹中(从目录截图可见该文件夹),当前上下文里不存在任何.jar文件,因此ADD指令触发找不到源文件的错误。
解决方案
方案1:使用项目根目录作为构建上下文(推荐)
修改构建命令,以项目根目录为上下文,并指定Dockerfile的路径:
docker build -f src/main/docker/Dockerfile .
同时更新Dockerfile中的ADD指令,指定JAR文件的正确路径:
ADD target/*.jar contourservice.jar
方案2:临时复制JAR文件到docker目录(不推荐)
先将target/下的JAR文件复制到src/main/docker/目录,再执行原构建命令:
cp target/*.jar src/main/docker/ docker build src/main/docker/
此方式会污染src/main/docker/目录,仅适合临时测试使用。
内容的提问来源于stack exchange,提问作者Шатов Данил
相关产品推荐
相关产品推荐

