【问题标题】:Docker gradle access deniedDocker gradle 访问被拒绝
【发布时间】:2020-06-05 21:06:59
【问题描述】:

我尝试使用 docker-compose 构建 docker 映像,但出现此错误

/bin/sh: 1: ./gradle: Permission denied

我的 Dockerfile 是

FROM gradle:6.5.0-jdk11 AS TEMP_BUILD_IMAGE
ENV APP_HOME=/usr/app/
WORKDIR $APP_HOME
COPY build.gradle.kts settings.gradle.kts $APP_HOME

COPY gradle $APP_HOME/gradle
COPY --chown=gradle:gradle . /home/gradle/src
USER root
RUN chown -R gradle /home/gradle/src

RUN ./gradle build || return 0
COPY . .
RUN ./gradle clean build

FROM openjdk:11-jdk
ENV ARTIFACT_NAME=app.jar
ENV APP_HOME=/usr/app/

WORKDIR $APP_HOME
COPY --from=TEMP_BUILD_IMAGE $APP_HOME/build/libs/$ARTIFACT_NAME .

ENTRYPOINT exec java -jar ${ARTIFACT_NAME}

这就是我在 shell 中得到的东西

D:\Docker>docker-compose up -d
Building config-server
Step 1/17 : FROM gradle:6.5.0-jdk11 AS TEMP_BUILD_IMAGE
 ---> a001e5b2850a
Step 2/17 : ENV APP_HOME=/usr/app/
 ---> Using cache
 ---> 07cf3a267c37
Step 3/17 : WORKDIR $APP_HOME
 ---> Using cache
 ---> 87be3841245e
Step 4/17 : COPY build.gradle.kts settings.gradle.kts $APP_HOME
 ---> Using cache
 ---> eff11fa2348e
Step 5/17 : COPY gradle $APP_HOME/gradle
 ---> Using cache
 ---> 10fca093f82e
Step 6/17 : COPY --chown=gradle:gradle . /home/gradle/src
 ---> b1f888f97818
Step 7/17 : USER root
 ---> Running in bde4f2d435fe
Removing intermediate container bde4f2d435fe
 ---> e8fba435db0c
Step 8/17 : RUN chown -R gradle /home/gradle/src
 ---> Running in d88ea2196f38
Removing intermediate container d88ea2196f38
 ---> b5b4727dd51f
Step 9/17 : RUN ./gradle build || return 0
 ---> Running in d218205301d9
/bin/sh: 1: ./gradle: Permission denied
Removing intermediate container d218205301d9
 ---> da37b296879b
Step 10/17 : COPY . .
 ---> e6cfac4a75a3
Step 11/17 : RUN ./gradle clean build
 ---> Running in 34480bf73106
/bin/sh: 1: ./gradle: Permission denied
ERROR: Service 'config-server' failed to build: The command '/bin/sh -c ./gradle clean build' returned a non-zero code: 126

请问我该如何解决这个错误?

【问题讨论】:

  • 很确定你的意思是在 Dockerfile 的第 11 行有RUN gradle build。而且您不应该尝试将gradle 二进制文件复制到已经有一个容器中。
  • 感谢@wmorrell 的回复。那么我应该如何更改才能使其正常工作?

标签: java spring docker dockerfile


【解决方案1】:

您正在使用本身具有 gradle 的基本图像。因此,您不需要显式复制 gradle。只需从 gradle RUN 中删除 ./

RUN gradle build || return 0
COPY . .
RUN gradle clean build

输出

Step 9/17 : RUN gradle build || return 0
 ---> Running in fd470c45e443

Welcome to Gradle 6.5!

Here are the highlights of this release:
 - Experimental file-system watching
 - Improved version ordering
 - New samples

For more details see https://docs.gradle.org/6.5/release-notes.html

Starting a Gradle Daemon (subsequent builds will be faster)

> Task :buildEnvironment

------------------------------------------------------------
Root project
------------------------------------------------------------

classpath
No dependencies

A web-based, searchable dependency report is available by adding the --scan option.

BUILD SUCCESSFUL in 25s
1 actionable task: 1 executed
Removing intermediate container fd470c45e443
 ---> dd4056a53129
Step 10/17 : COPY . .
 ---> 3a46c7e9d9bb
Step 11/17 : RUN gradle clean build
 ---> Running in c3341e91aef0

Welcome to Gradle 6.5!

【讨论】:

    猜你喜欢
    • 2016-09-21
    • 1970-01-01
    • 2017-06-18
    • 2020-12-07
    • 2017-11-19
    • 2022-01-23
    • 1970-01-01
    • 2019-03-16
    • 2017-02-25
    相关资源
    最近更新 更多