gradle-docker icon indicating copy to clipboard operation
gradle-docker copied to clipboard

Gradle 7.0 `dockerRun{}` Illegal null value provided in this collection

Open mjohnston-vtx opened this issue 4 years ago • 9 comments

What happened?

Using: Gradle v7.0 com.palantir.docker v0.26.0 com.palantir.docker-run v0.26.0

In the build.gradle, I have the following dockerRun task:

dockerRun {
    name "spectral${port}"
    image 'stoplight/spectral:latest'
    volumes 'public': '/tmp'
    daemonize false
    ports "${port}:5000"
    clean true
    command 'lint', '-F', '"hint"', '-v', '/tmp/output.yaml'
}

When the build attempts to run this, I get the following error: Illegal null value provided in this collection: [inspect, --format={{.State.Running}}, null]

I suspect this may have something to do with Gradle 7.0, since I did not encounter this issue using Gradle 6.5.

What did you want to happen?

dockerRun task executes successfully.

Edit: Added an alternate solution in a comment below.

mjohnston-vtx avatar Apr 28 '21 11:04 mjohnston-vtx

Same problem on Both 7.0 and 6.8.1

Chase22 avatar May 05 '21 08:05 Chase22

Also ran into this issue

dotCipher avatar May 16 '21 02:05 dotCipher

For anyone who still wants to be able to lint OAS files without waiting for this plugin to be updated, I ended up changing out this Docker task for an NpxTask instead:

plugins {
    id "com.github.node-gradle.node" version "3.0.1"
}

...

task('yamlLint', type: NpxTask) {
    command = '@stoplight/spectral'
    args = ['lint', '-F', '"hint"', '-v', "${rootDir}/someSpecFile.yaml"]
}

I did notice it's a bit slower than the Docker lint, but it actually works on Gradle 7.0, which was good enough for me.

mjohnston-vtx avatar Jun 04 '21 15:06 mjohnston-vtx

Any update on issue ? Got same on my side.

levyndot avatar Sep 01 '21 09:09 levyndot

Any one who was able to get a solution for this? Which version works with gradle 6.8+?

asood15 avatar Apr 04 '22 15:04 asood15

@asood15 Are you using Kotlin DSL? Because got the same problem and now i am switching back to groovy...the project is new so this should be ok

Dylar avatar Apr 04 '22 17:04 Dylar

Hi @Dylar. I am using groovy. I was running gradle v6.5.1, palantir.docker v0.25.0, palantir.docker-run v0.25.0. Now i want to upgrade gradle to v 7.0+ but i get this problem. Were you able to run it using groovy?

asood15 avatar Apr 04 '22 19:04 asood15

@asood15 Hey :)

I am using gradle 7.4.2 and this is my build.gradle But dont know if everything is correct (but now its working)

plugins {
    id 'application'
    id "org.jetbrains.kotlin.jvm" version "1.6.20"
    id 'io.spring.dependency-management' version "1.0.11.RELEASE"
    id 'org.springframework.boot' version '2.6.1'
    id 'com.palantir.docker' version '0.31.0'
    id 'com.palantir.docker-run' version '0.31.0'
}
apply plugin: "kotlin"
apply plugin: "application"

version = "0.0.1"

mainClassName = 'de.TestSpringApi'

repositories {
    mavenCentral()
}

dependencies {
    implementation "org.springframework.boot:spring-boot-starter-web:2.5.5"
    implementation "com.fasterxml.jackson.module:jackson-module-kotlin:2.13.+"
    implementation "org.jetbrains.kotlin:kotlin-reflect"
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"

    testImplementation "org.springframework.boot:spring-boot-starter-test:2.5.5"
    testImplementation "io.mockk:mockk:1.12.0"
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

test {
    useJUnitPlatform()
}

String dockerHubUsernameProperty = findProperty('dockerHubUsername') ?: 'Dylar'
String imageName = "${dockerHubUsernameProperty}/testSpringApi:$version$version"

docker {
    name imageName
    files "build/libs/${bootJar.archiveFileName.get()}"
    buildArgs([JAR_FILE: bootJar.archiveFileName.get()])
}

dockerRun {
    name project.name
    image imageName
    ports '8080:8080'
    clean true
}

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

Dylar avatar Apr 04 '22 20:04 Dylar

I think in my case i need to upgrade the versions and try. Thanks a lot @Dylar

asood15 avatar Apr 05 '22 07:04 asood15

Hi, guys. I still face the issue with Gradle Kotlin DSL configuration. Tried with Gradle 7.5.1 and 7.4.2

plugins {
    id("com.palantir.docker") version "0.34.0"
    id("com.palantir.docker-run") version "0.34.0"
    id("com.palantir.docker-compose") version "0.34.0"
}
Caused by: java.lang.IllegalArgumentException: Illegal null value provided in this collection: [inspect, --format={{.State.Running}}, null]
	at org.gradle.util.internal.GUtil.addToCollection(GUtil.java:174)
	at org.gradle.process.internal.ProcessArgumentsSpec.args(ProcessArgumentsSpec.java:88)
	at org.gradle.process.internal.ProcessArgumentsSpec.setArgs(ProcessArgumentsSpec.java:100)
	at org.gradle.process.internal.ProcessArgumentsSpec.commandLine(ProcessArgumentsSpec.java:61)
	at org.gradle.process.internal.ProcessArgumentsSpec.commandLine(ProcessArgumentsSpec.java:54)
	at org.gradle.process.internal.DefaultExecSpec.commandLine(DefaultExecSpec.java:71)
	at org.gradle.api.tasks.AbstractExecTask.commandLine(AbstractExecTask.java:81)
	at org.gradle.api.tasks.AbstractExecTask.commandLine(AbstractExecTask.java:46)
	at jdk.internal.reflect.GeneratedMethodAccessor935.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at com.palantir.gradle.docker.DockerRunPlugin$_apply_closure6$_closure7.doCall(DockerRunPlugin.groovy:62)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at com.palantir.gradle.docker.DockerRunPlugin$_apply_closure6.doCall(DockerRunPlugin.groovy:60)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingClosure$1.lambda$run$0(DefaultListenerBuildOperationDecorator.java:199)
	at org.gradle.configuration.internal.DefaultUserCodeApplicationContext$CurrentApplication.reapply(DefaultUserCodeApplicationContext.java:98)
	at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingClosure$1.run(DefaultListenerBuildOperationDecorator.java:196)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:66)
	at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:157)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:59)
	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:47)
	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:68)
	at org.gradle.configuration.internal.DefaultListenerBuildOperationDecorator$BuildOperationEmittingClosure.doCall(DefaultListenerBuildOperationDecorator.java:193)

For some reason ext.name returns null, instead of "dockerRun"

demwis avatar Nov 20 '22 21:11 demwis