Gradle 尚未为属性';指定任何值;imageId';创建容器时

Gradle 尚未为属性';指定任何值;imageId';创建容器时,gradle,docker,build.gradle,gradle-plugin,Gradle,Docker,Build.gradle,Gradle Plugin,我是docker新手,在gradle中使用bmuschko插件创建docker映像、容器并运行它。只有buildImage任务似乎有效。当创建一个容器时,它说 尚未为属性“imageId”指定值 这是我的gradle文件片段 dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath 'com.bmusch

我是docker新手,在gradle中使用bmuschko插件创建docker映像、容器并运行它。只有buildImage任务似乎有效。当创建一个容器时,它说

尚未为属性“imageId”指定值

这是我的gradle文件片段

dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath 'com.bmuschko:gradle-docker-plugin:2.6.5'
    }
import com.bmuschko.gradle.docker.tasks.container.*
import com.bmuschko.gradle.docker.tasks.image.*

task copyJar(type: Copy) {
    dependsOn   'jar'
    from        'build/libs/rest-app-0.0.1-SNAPSHOT.jar'
    into        'build/docker'

    from        'src/main/resources/Dockerfile'
    into        'build/docker'
}

task buildImage(type: DockerBuildImage) {
    dependsOn 'copyJar'
    inputDir = file('build/docker');
    url = 'unix:///var/run/docker.sock'
    tag = 'rest-app/nci:0.1'
}

task createContainer(type: DockerCreateContainer) {
    dependsOn buildImage
    containerName = 'my-rest-app'
    targetImageId { buildImage.getImageId() }
    portBindings = ['8080:8080']
}

task startContainer(type: DockerStartContainer) {
    dependsOn createContainer
    targetContainerId { createContainer.getContainerId()}
}

build.dependsOn copyJar
build.dependsOn buildImage
build.dependsOn createContainer
这是stacktrace代码段

dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
        classpath 'com.bmuschko:gradle-docker-plugin:2.6.5'
    }
import com.bmuschko.gradle.docker.tasks.container.*
import com.bmuschko.gradle.docker.tasks.image.*

task copyJar(type: Copy) {
    dependsOn   'jar'
    from        'build/libs/rest-app-0.0.1-SNAPSHOT.jar'
    into        'build/docker'

    from        'src/main/resources/Dockerfile'
    into        'build/docker'
}

task buildImage(type: DockerBuildImage) {
    dependsOn 'copyJar'
    inputDir = file('build/docker');
    url = 'unix:///var/run/docker.sock'
    tag = 'rest-app/nci:0.1'
}

task createContainer(type: DockerCreateContainer) {
    dependsOn buildImage
    containerName = 'my-rest-app'
    targetImageId { buildImage.getImageId() }
    portBindings = ['8080:8080']
}

task startContainer(type: DockerStartContainer) {
    dependsOn createContainer
    targetContainerId { createContainer.getContainerId()}
}

build.dependsOn copyJar
build.dependsOn buildImage
build.dependsOn createContainer
。。。。。 rest应用程序:检查:rest应用程序:createContainer ID!!!!!!!8cf8fc8d2af9 :rest应用程序:createContainer失败

失败:生成失败,出现异常

错误:发现任务的配置有问题 “:rest应用程序:createContainer”

尚未为属性“imageId”指定任何值。试试看:和你一起跑 --info或--debug选项以获取更多日志输出

例外情况是:org.gradle.api.tasks.TaskValidationException:一个问题 在任务“:rest应用程序:createContainer”的配置中找到。 在 org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:55)


谁能告诉我怎么解决这个问题?提前谢谢。

收到问题了。似乎该功能(即,
targetImageId(…)
未按预期工作。因此,从2.6.6降到2.6.5就像一种魅力。这是他们的官方github网站上的图片。

不熟悉Gradle,但从错误消息判断,您似乎没有指定图像ID。您不应该提供一个基础图像来建立自己的图像吗?@Pubudu感谢您的回复。因为它有
targetImageId{buildImage.getImageId()}
,所以它不是必需的。看起来这个功能在新版本2.6.7中很好地工作。