【问题标题】:can't build and run app in docker compose. Task 'bootRun' not found in root project 'gradle'无法在 docker compose 中构建和运行应用程序。在根项目“gradle”中找不到任务“bootRun”
【发布时间】:2020-06-07 11:39:07
【问题描述】:

弹簧靴。我通过 Gradle 构建和运行项目。

gradlew bootRun

这是成功的构建和运行。 不错。

现在我想通过 Docker compose 构建和运行。 这是我的 Dockerfile:

FROM openjdk:8
FROM gradle
RUN gradle wrapper
RUN ./gradlew bootRun
ADD build/libs/eshop-1.0.0.jar eshop-1.0.0.jar
ENTRYPOINT ["java", "-jar", "eshop-1.0.0.jar"]

在 docker-compose.yml 中

version: "3"

    services:
      server:
        build: .
        command: java -jar build/libs/eshop-1.0.0.jar
        ports:
          - 8090:8090

现在在 Docker 的工具中运行命令如下:

$ docker-compose build
Building server
Step 1/6 : FROM openjdk:8
 ---> 8c6851b1fc09
Step 2/6 : FROM gradle
 ---> 1fcd09a6bb3b
Step 3/6 : RUN gradle wrapper
 ---> Using cache
 ---> acf242fa68db
Step 4/6 : RUN ./gradlew bootRun
 ---> Running in 8c7c62db19f9
Downloading https://services.gradle.org/distributions/gradle-6.2-bin.zip
.........10%.........20%.........30%..........40%.........50%.........60%..........70%.........80%.........90%..........100%

Welcome to Gradle 6.2!

Here are the highlights of this release:
 - Dependency checksum and signature verification
 - Documentation links in deprecation messages
 - Shareable read-only dependency cache

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

Starting a Gradle Daemon (subsequent builds will be faster)

FAILURE: Build failed with an exception.

* What went wrong:
Task 'bootRun' not found in root project 'gradle'.

* Try:
Run gradlew tasks to get a list of available tasks. Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1m 10s
ERROR: Service 'server' failed to build: The command '/bin/sh -c ./gradlew bootRun' returned a non-zero code: 1

那么为什么我会出错?

【问题讨论】:

  • 为了让 bootRun 工作,你的应用程序的源代码必须在容器中。我在你的 Dockerfile 中看不到任何添加它的东西。在容器之外构建您的应用程序,然后将其 fat jar 或其类和依赖项添加到容器中会更传统。你在容器内执行 bootRun 的原因是什么?
  • @AndyWilkinson 我添加了我的答案

标签: spring-boot docker-compose


【解决方案1】:

打开 build.gradle 文件(在项目的根文件夹中找到)并确保文件中存在以下插件:

plugins {
    id 'org.springframework.boot' version '2.2.7.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
}

P.S.:插件版本可能会延迟。

(我遇到了类似的问题,我与正常工作的 gradle 文件进行了交叉检查。发现我的项目的 build.gradle 中缺少两个插件)

【讨论】:

    【解决方案2】:

    我需要以最少的步骤在客户端计算机上启动我的应用程序。

    这对我有用。

    文档文件:

    FROM openjdk:8
    ADD build/libs/myapps-1.0.0.jar myapps-1.0.0.jar
    ENTRYPOINT ["java", "-jar", "myapps-1.0.0.jar"]
    

    docker-compose.yml

     version: "3"
    
    services:
      server:
        image: my_login/my_apps:1.0.0
        build: .
        ports:
          - 8090:8090
    

    现在在 Docker 终端中:

    在项目的文件夹中:

         1. Create Dockerfile
         2. Create docker-compose.yml
         3. docker-compose build
         4. push image to repo:
            docker tag myapp my_login/myapp:1.0.0
            docker login -u "my_login" -p "some_my_pass" docker.io
            docker push my_login/eshop:myapp
    
    
     In some empty folder (in client machine):
    
     5. Pull from repo
        docker-compose pull
     6. start app by docker compose
        docker-compose up
     7. open web page on `localhost:8090`
    

    现在它的工作。不错。

    所以客户端只需要拥有我的docker-compose.yml 文件并运行两个命令:

    docker-compose pull
    

    和

    docker-compose up
    

    使用 docker compose 的方法是否正确?

    【讨论】:

      猜你喜欢
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-21
      • 1970-01-01
      • 2018-05-16
      • 2018-08-24
      相关资源
      最近更新 更多