Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Docker中具有连续构建的Spring boot gradle项目_Spring Boot_Docker_Gradle_Dockerfile - Fatal编程技术网

Spring boot Docker中具有连续构建的Spring boot gradle项目

Spring boot Docker中具有连续构建的Spring boot gradle项目,spring-boot,docker,gradle,dockerfile,Spring Boot,Docker,Gradle,Dockerfile,我创建了一个springstarter项目,其中gradle作为依赖项管理器,还包括springbootdev工具。我的目标是创建一个docker映像,这样每当我在docker容器中更改java文件时,都必须进行实时重新加载。这在以下配置中运行良好 Dockerfile FROM gradle:5.6.2-jdk8 WORKDIR /app COPY . /app RUN gradle build EXPOSE 8080 CMD ["sh", "start.sh"] FROM gradle:5

我创建了一个springstarter项目,其中gradle作为依赖项管理器,还包括springbootdev工具。我的目标是创建一个docker映像,这样每当我在docker容器中更改java文件时,都必须进行实时重新加载。这在以下配置中运行良好

Dockerfile

FROM gradle:5.6.2-jdk8
WORKDIR /app
COPY . /app
RUN gradle build
EXPOSE 8080
CMD ["sh", "start.sh"]
FROM gradle:5.6.2-jdk8
WORKDIR /app
COPY . /app

RUN gradle --no-daemon --warning-mode all --console=plain getDeps

EXPOSE 8080
CMD ["sh", "start.sh"]
#!/bin/bash
gradle --version
gradle build --continuous -PskipDownload=true --console=plain &
gradle bootRun -PskipDownload=true --console=plain
// other configs
ext {
    skipDownload = project.hasProperty('skipDownload') ? project.getProperty('skipDownload') as boolean : false
}    
repositories {
    if (skipDownload) {
        flatDir {
            dirs 'libs'
        }
    } else {
        mavenCentral()
    }
}
dependencies {
    if (skipDownload) {
        implementation files('libs/spring-boot-starter-data-jdbc-2.3.7.RELEASE.jar')

    } else {
        implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jdbc', version: '2.3.7.RELEASE'

    }
}
task getDeps(type: Copy) {
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    from configurations.compileClasspath into "libs/"
    from configurations.runtimeClasspath into "libs/"
}
start.sh

#!/bin/bash
gradle --version
gradle build --continuous &
gradle bootRun
这起作用了

我的一个控制器文件如下所示

@RestController
public class MainController {
    @GetMapping("/")
    String test() {
        return "Test Success";
    }
}
导航到
localhost:8080
时在浏览器中获得“测试成功”。当docker容器内的文件
/app/../MainController.java
更改为说,
返回“已更新”,更改将自动影响

这就是问题所在

FROM gradle:5.6.2-jdk8
WORKDIR /app
COPY . /app
RUN gradle build
EXPOSE 8080
CMD ["sh", "start.sh"]
FROM gradle:5.6.2-jdk8
WORKDIR /app
COPY . /app

RUN gradle --no-daemon --warning-mode all --console=plain getDeps

EXPOSE 8080
CMD ["sh", "start.sh"]
#!/bin/bash
gradle --version
gradle build --continuous -PskipDownload=true --console=plain &
gradle bootRun -PskipDownload=true --console=plain
// other configs
ext {
    skipDownload = project.hasProperty('skipDownload') ? project.getProperty('skipDownload') as boolean : false
}    
repositories {
    if (skipDownload) {
        flatDir {
            dirs 'libs'
        }
    } else {
        mavenCentral()
    }
}
dependencies {
    if (skipDownload) {
        implementation files('libs/spring-boot-starter-data-jdbc-2.3.7.RELEASE.jar')

    } else {
        implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jdbc', version: '2.3.7.RELEASE'

    }
}
task getDeps(type: Copy) {
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    from configurations.compileClasspath into "libs/"
    from configurations.runtimeClasspath into "libs/"
}
即使Dockerfile中有
RUN gradle build
,带有此图像的
docker RUN
命令似乎是再次下载gradle依赖项,因为命令
gradle build--continuous
gradle bootRun


我想要快速运行
docker
命令,就像它已经下载了所有依赖项一样。请提出解决办法。需要实时重新加载。

我在Dockerfile中使用了
getDeps
选项,并在start.sh文件中使用了
skipDownload
。这将在Docker构建期间下载所有依赖项,实时重新加载现在很快

Dockerfile

FROM gradle:5.6.2-jdk8
WORKDIR /app
COPY . /app
RUN gradle build
EXPOSE 8080
CMD ["sh", "start.sh"]
FROM gradle:5.6.2-jdk8
WORKDIR /app
COPY . /app

RUN gradle --no-daemon --warning-mode all --console=plain getDeps

EXPOSE 8080
CMD ["sh", "start.sh"]
#!/bin/bash
gradle --version
gradle build --continuous -PskipDownload=true --console=plain &
gradle bootRun -PskipDownload=true --console=plain
// other configs
ext {
    skipDownload = project.hasProperty('skipDownload') ? project.getProperty('skipDownload') as boolean : false
}    
repositories {
    if (skipDownload) {
        flatDir {
            dirs 'libs'
        }
    } else {
        mavenCentral()
    }
}
dependencies {
    if (skipDownload) {
        implementation files('libs/spring-boot-starter-data-jdbc-2.3.7.RELEASE.jar')

    } else {
        implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jdbc', version: '2.3.7.RELEASE'

    }
}
task getDeps(type: Copy) {
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    from configurations.compileClasspath into "libs/"
    from configurations.runtimeClasspath into "libs/"
}
start.sh文件

FROM gradle:5.6.2-jdk8
WORKDIR /app
COPY . /app
RUN gradle build
EXPOSE 8080
CMD ["sh", "start.sh"]
FROM gradle:5.6.2-jdk8
WORKDIR /app
COPY . /app

RUN gradle --no-daemon --warning-mode all --console=plain getDeps

EXPOSE 8080
CMD ["sh", "start.sh"]
#!/bin/bash
gradle --version
gradle build --continuous -PskipDownload=true --console=plain &
gradle bootRun -PskipDownload=true --console=plain
// other configs
ext {
    skipDownload = project.hasProperty('skipDownload') ? project.getProperty('skipDownload') as boolean : false
}    
repositories {
    if (skipDownload) {
        flatDir {
            dirs 'libs'
        }
    } else {
        mavenCentral()
    }
}
dependencies {
    if (skipDownload) {
        implementation files('libs/spring-boot-starter-data-jdbc-2.3.7.RELEASE.jar')

    } else {
        implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jdbc', version: '2.3.7.RELEASE'

    }
}
task getDeps(type: Copy) {
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    from configurations.compileClasspath into "libs/"
    from configurations.runtimeClasspath into "libs/"
}
build.gradle

FROM gradle:5.6.2-jdk8
WORKDIR /app
COPY . /app
RUN gradle build
EXPOSE 8080
CMD ["sh", "start.sh"]
FROM gradle:5.6.2-jdk8
WORKDIR /app
COPY . /app

RUN gradle --no-daemon --warning-mode all --console=plain getDeps

EXPOSE 8080
CMD ["sh", "start.sh"]
#!/bin/bash
gradle --version
gradle build --continuous -PskipDownload=true --console=plain &
gradle bootRun -PskipDownload=true --console=plain
// other configs
ext {
    skipDownload = project.hasProperty('skipDownload') ? project.getProperty('skipDownload') as boolean : false
}    
repositories {
    if (skipDownload) {
        flatDir {
            dirs 'libs'
        }
    } else {
        mavenCentral()
    }
}
dependencies {
    if (skipDownload) {
        implementation files('libs/spring-boot-starter-data-jdbc-2.3.7.RELEASE.jar')

    } else {
        implementation group: 'org.springframework.boot', name: 'spring-boot-starter-data-jdbc', version: '2.3.7.RELEASE'

    }
}
task getDeps(type: Copy) {
    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
    from configurations.compileClasspath into "libs/"
    from configurations.runtimeClasspath into "libs/"
}

您是否尝试将您的~/.gradle文件夹从主机映射到容器中的/root/.gradle?@JonathP感谢您的支持。我已经解决了这个问题,但忘了把答案贴出来。通过从主机映射gradle依赖项,将在那里创建到主机的依赖项,没有gradle Docker映像将无法在主机中运行。getDeps在哪里?另外,您如何处理本地Gradle依赖关系?您是否在prem上运行Maven/Gradle存储库服务?@ben3000请查看Dockerfile
run Gradle。。。。。getDeps
。我不明白第二个问题。你说的地方副局长是什么意思?这是一个容器,每个构建过程都发生在容器内部(或docker构建期间的中间容器)。因此,我们需要做的就是从一个基本的gradle映像创建映像-
来自gradle:5.6.2-jdk8
。我再次遇到了这个设置的另一个问题,并进一步改进了它。有关详细信息,请参阅此页-
getDeps
是您开发的gradle任务,还是gradle提供的任务?说到本地依赖性,我指的是我构建的库,有没有办法处理这个问题?@ben3000我已经用相关的gradle设置更新了答案。谢谢你指出这一点。