Giter Site home page Giter Site logo

bmuschko / gradle-docker-plugin Goto Github PK

View Code? Open in Web Editor NEW
1.2K 1.2K 362.0 10.8 MB

Gradle plugin for managing Docker images and containers.

Home Page: https://bmuschko.github.io/gradle-docker-plugin/current/user-guide/

License: Apache License 2.0

Groovy 47.21% Kotlin 2.54% Java 49.95% Shell 0.16% Batchfile 0.13%
docker gradle-plugin

gradle-docker-plugin's Introduction

Build Status Build Status User Guide Developer Guide API Doc

Gradle Docker plugin

Over the past couple of years this plugin has seen many releases. Our core committers and contributors have done an amazing job! Sometimes life can get in the way of Open Source leading to less frequent releases and slower response times on issues.
We are actively looking for additional committers that can drive the direction of the functionality and are willing to take on maintenance and implementation of the project. If you are interested, shoot me a mail. We'd love to hear from you!

Gradle plugin for managing Docker images and containers using the Docker remote API. The heavy lifting of communicating with the Docker remote API is handled by the Docker Java library. Please refer to the library’s documentation for more information on the supported Docker’s client API and Docker server version.

Documentation

gradle-docker-plugin's People

Contributors

ajmath avatar akeely avatar bmuschko avatar cdancy avatar childnode avatar cliffred avatar denuno avatar donbeave avatar double16 avatar gaiazov avatar holgerstolzenberg avatar hugares avatar jberglund-bsft avatar jeysal avatar jlleitschuh avatar jocce-nilsson avatar ljacomet avatar m-raab avatar matteomazza91 avatar orzeh avatar patricklucas avatar petehayes avatar schoeneutng avatar sineaggi avatar steinybot avatar steve-perkins avatar stevendpclark avatar tlusk avatar unlimitedsola avatar vampire avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gradle-docker-plugin's Issues

Nullpointer when starting container

I tried your plugin, but unfortunately I get a nullpointer when trying to start the container via gradle.

  • What went wrong:
    Execution failed for task ':startMyAppContainer'.

    java.lang.NullPointerException (no error message)

  • Try:
    Run with --info or --debug option to get more log output.

  • Exception is:
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':startMyAppContainer'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:305)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51)
    at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
    at org.gradle.launcher.Main.doAction(Main.java:33)
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
    at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
    at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:127)
    at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:56)
    Caused by: java.lang.NullPointerException
    at com.kpelykh.docker.client.utils.JsonClientFilter.handle(JsonClientFilter.java:19)
    at com.sun.jersey.api.client.filter.LoggingFilter.handle(LoggingFilter.java:183)
    at com.sun.jersey.api.client.Client.handle(Client.java:648)
    at com.sun.jersey.api.client.WebResource.voidHandle(WebResource.java:694)
    at com.sun.jersey.api.client.WebResource.access$400(WebResource.java:74)
    at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:548)
    at com.kpelykh.docker.client.DockerClient.startContainer(DockerClient.java:575)
    at com.kpelykh.docker.client.DockerClient.startContainer(DockerClient.java:562)
    at com.kpelykh.docker.client.DockerClient$startContainer.call(Unknown Source)
    at org.gradle.api.plugins.docker.tasks.container.DockerStartContainer.runRemoteCommand(DockerStartContainer.groovy:23)
    at org.gradle.api.plugins.docker.tasks.AbstractDockerTask$_start_closure1.doCall(AbstractDockerTask.groovy:44)
    at org.gradle.api.plugins.docker.tasks.AbstractDockerTask.withDockerJavaClassLoader(AbstractDockerTask.groovy:54)
    at org.gradle.api.plugins.docker.tasks.AbstractDockerTask.this$4$withDockerJavaClassLoader(AbstractDockerTask.groovy)
    at org.gradle.api.plugins.docker.tasks.AbstractDockerTask$this$4$withDockerJavaClassLoader.callCurrent(Unknown Source)
    at org.gradle.api.plugins.docker.tasks.AbstractDockerTask$this$4$withDockerJavaClassLoader.callCurrent(Unknown Source)
    at org.gradle.api.plugins.docker.tasks.AbstractDockerTask.start(AbstractDockerTask.groovy:43)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:218)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:579)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:562)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 47 more

BUILD FAILED

My setup:

OSX Mavericks
boot2Docker
Gradle 2.1

$ docker info
Containers: 30
Images: 41
Storage Driver: aufs
Root Dir: /mnt/sda1/var/lib/docker/aufs
Dirs: 101
Execution Driver: native-0.2
Kernel Version: 3.16.1-tinycore64
Operating System: Boot2Docker 1.2.0 (TCL 5.3); 3.16.1-config-file : e75396e - Fri Aug 22 06:45:30 UTC 2014
Debug mode (server): true
Debug mode (client): false
Fds: 11
Goroutines: 11
EventsListeners: 0
Init Path: /usr/local/bin/docker

If I can provide some help or more information, just let me know.
Thanks for your efforts, best

Max

Failures from remote api do not fail build

Hi,

I was wondering if I am missing something. Currently when there is an error building an image gradle is still reporting a success from at least a DockerBuildImage task. I am currently handling this by looking for an image id within a doLast closure within the task.

Is there a better way? Was this behaviour on purpose, as it seems all the response handlers have the same behaviour when errors are being reported from the api?

task buildImage(type: DockerBuildImage) {
    dependsOn createDockerfile
    inputDir = createDockerfile.destFile.parentFile
    tag = 'bmuschko/myimage'

    doLast {
        if ( getImageId() == null ) {
            throw new GradleException( 'Failed to build image' )
        }
    }
}

How to get dockerVersion or dockerInfo runinng?

So far I've followed example and suggested steps:

  1. added

buildscript {
repositories {
jcenter()
}

dependencies {
    classpath 'com.bmuschko:gradle-docker-plugin:2.0.2'
}

}

at the begining of build.gradle file

  1. applied both plugins:

apply plugin: 'com.bmuschko.docker-remote-api' and
apply plugin: 'com.bmuschko.docker-java-application'

Now if I go to command line, and type
$ gradle tasks

I have just these three at exposal:

Docker tasks

dockerBuildImage - Builds the Docker image for the Java application.
dockerCopyDistResources - Copies the distribution resources to a temporary directory for image creation.
dockerPushImage - Pushes created Docker image to the repository.

What about dockerImage or dockerVersion?

How to run those ?

Thank You

NullPointerException in sample test task

My start container task works fine; but when implementing a test task following this sample, I had attached exception ... any ideas? thanks!!

task functionalTestMyApp(type: Test) {
dependsOn startMyAppContainer
finalizedBy stopMyAppContainer
}

:stopPostgresqlContainer
Stopping container with ID '53d7f0e4c08bd1ff3d9f6f56b1d34c36b34ece1b14354a47171f4891f6deef8f'.
...

  • Exception is:
    java.lang.NullPointerException
    at org.gradle.api.internal.project.taskfactory.OutputDirectoryPropertyAnnotationHandler$1.va
    lidate(OutputDirectoryPropertyAnnotationHandler.java:47)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$PropertyInfo$
    5.checkValid(AnnotationProcessingTaskFactory.java:467)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$Validator.val
    idate(AnnotationProcessingTaskFactory.java:274)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExec
    uter.java:41)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmpt
    ySourceFilesTaskExecuter.java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWit
    hNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExec
    uter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMo
    stOnceTaskExecuter.java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:
    306)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(Ab
    stractTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(Ab
    stractTaskPlanExecutor.java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTa
    skPlanExecutor.java:51)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.ja
    va:23)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.
    java:88)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java
    :29)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:3
    2)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:
    149)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProces
    sBuildActionExecuter.java:80)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecute
    r.java:36)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecute
    r.java:26)
    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51)
    at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:169)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineA
    ctionFactory.java:237)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineA
    ctionFactory.java:210)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.j
    ava:35)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.j
    ava:24)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFac
    tory.java:206)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFac
    tory.java:169)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33
    )
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22
    )
    at org.gradle.launcher.Main.doAction(Main.java:33)
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
    at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
    at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:127)
    at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:55)

Can't run integration tests

I'm trying to run the integration tests against docker running with boot2docker and a private docker registry that is running "insecurely" at port 5000.

./gradlew build -DdockerServerUrl=https://192.168.59.103:2376 -DdockerCertPath=/Users/dresnick/.boot2docker/certs/boot2docker-vm -DdockerPrivateRegistryUrl=private-registry.company.com:5000

Some tests fail with this:

com.bmuschko.gradle.docker.AbstractDockerRemoteApiTaskIntegrationTest > Can create and execute custom remote API task with default extension values STANDARD_OUT
    21:56:30.333 [Test worker] DEBUG org.gradle.tooling.GradleConnector - Connecting from tooling API consumer version 2.3
    21:56:30.401 [Connection worker] DEBUG o.g.t.i.c.l.DefaultToolingImplementationLoader - Using tooling provider from Gradle distribution 'https://services.gradle.org/distributions/gradle-2.3-bin.zip'
    21:56:30.402 [Connection worker] DEBUG o.g.t.i.c.l.DefaultToolingImplementationLoader - Using tooling provider classpath: [/Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/ant-1.9.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/ant-launcher-1.9.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/asm-all-5.0.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/commons-collections-3.2.1.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/commons-io-1.4.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/commons-lang-2.6.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/dom4j-1.6.1.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/gradle-base-services-2.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/gradle-base-services-groovy-2.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/gradle-cli-2.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/gradle-core-2.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/gradle-docs-2.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/gradle-launcher-2.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/gradle-messaging-2.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/gradle-model-core-2.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/gradle-model-groovy-2.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/gradle-native-2.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/gradle-open-api-2.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/gradle-resources-2.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/gradle-tooling-api-2.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/gradle-ui-2.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/gradle-wrapper-2.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/groovy-all-2.3.9.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/guava-jdk5-17.0.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/jansi-1.2.1.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/jarjar-1.3.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/javax.inject-1.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/jaxen-1.1.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/jcip-annotations-1.0.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/jcl-over-slf4j-1.7.7.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/jna-3.2.7.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/jul-to-slf4j-1.7.7.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/kryo-2.20.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/log4j-over-slf4j-1.7.7.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/logback-classic-1.0.13.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/logback-core-1.0.13.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/minlog-1.2.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/native-platform-0.10.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/native-platform-freebsd-amd64-0.10.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/native-platform-freebsd-i386-0.10.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/native-platform-linux-amd64-0.10.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/native-platform-linux-i386-0.10.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/native-platform-osx-amd64-0.10.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/native-platform-osx-i386-0.10.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/native-platform-windows-amd64-0.10.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/native-platform-windows-i386-0.10.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/objenesis-1.2.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/reflectasm-1.07-shaded.jar, /Users/dresnick/.gradle/wrapper/dists/gradle-2.3-bin/a48v6zq5mdp1uyn9rwlj56945/gradle-2.3/lib/slf4j-api-1.7.7.jar]
    21:56:30.474 [Connection worker] DEBUG o.g.t.i.provider.DefaultConnection - Tooling API provider 2.3 created.
    21:56:30.717 [Connection worker] DEBUG o.g.t.i.provider.ProviderConnection - Configuring logging to level: INFO
    Tooling API is using target Gradle version: 2.3.

    Connected to daemon DaemonInfo{pid=69610, address=[d001bb2d-ac2c-456c-8d65-aabdd1c50532 port:62967, addresses:[/0:0:0:0:0:0:0:1, /127.94.0.1, /127.0.0.1]], idle=true, context=DefaultDaemonContext[uid=10e89661-cc52-4ca4-892b-de1bd58bcda3,javaHome=/Library/Java/JavaVirtualMachines/jdk1.7.0_72.jdk/Contents/Home,daemonRegistryDir=/Users/dresnick/.gradle/daemon,pid=69610,idleTimeout=10800000,daemonOpts=-XX:MaxPermSize=256m,-XX:+HeapDumpOnOutOfMemoryError,-Xmx1024m,-Dfile.encoding=UTF-8,-Duser.country=US,-Duser.language=en,-Duser.variant]}. Dispatching request Build{id=5a8a5abe-c448-43cb-84ac-cbfcec2a875a.1, currentDir=/Users/dresnick/proj/gdp2}.

    Received result DaemonCommandResult[type=CommandFailure, value=org.gradle.launcher.exec.ReportedException: org.gradle.internal.exceptions.LocationAwareException: Build file '/Users/dresnick/proj/gdp2/build/integTest/build.gradle' line: 13
    A problem occurred evaluating root project 'integTest'.] from daemon DaemonInfo{pid=69610, address=[d001bb2d-ac2c-456c-8d65-aabdd1c50532 port:62967, addresses:[/0:0:0:0:0:0:0:1, /127.94.0.1, /127.0.0.1]], idle=true, context=DefaultDaemonContext[uid=10e89661-cc52-4ca4-892b-de1bd58bcda3,javaHome=/Library/Java/JavaVirtualMachines/jdk1.7.0_72.jdk/Contents/Home,daemonRegistryDir=/Users/dresnick/.gradle/daemon,pid=69610,idleTimeout=10800000,daemonOpts=-XX:MaxPermSize=256m,-XX:+HeapDumpOnOutOfMemoryError,-Xmx1024m,-Dfile.encoding=UTF-8,-Duser.country=US,-Duser.language=en,-Duser.variant]}.


com.bmuschko.gradle.docker.AbstractDockerRemoteApiTaskIntegrationTest > Can create and execute custom remote API task with default extension values FAILED
    Expected no exception to be thrown, but got 'org.gradle.tooling.BuildException'
        at spock.lang.Specification.noExceptionThrown(Specification.java:118)
        at com.bmuschko.gradle.docker.AbstractDockerRemoteApiTaskIntegrationTest.Can create and execute custom remote API task with default extension values(AbstractDockerRemoteApiTaskIntegrationTest.groovy:27)

        Caused by:
        org.gradle.tooling.BuildException: Could not execute build using Gradle distribution 'https://services.gradle.org/distributions/gradle-2.3-bin.zip'.
            at org.gradle.tooling.internal.consumer.ResultHandlerAdapter.onFailure(ResultHandlerAdapter.java:57)
            at org.gradle.tooling.internal.consumer.async.DefaultAsyncConsumerActionExecutor$1$1.run(DefaultAsyncConsumerActionExecutor.java:57)
            at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
            at java.lang.Thread.run(Thread.java:745)
            at org.gradle.tooling.internal.consumer.BlockingResultHandler.getResult(BlockingResultHandler.java:46)
            at org.gradle.tooling.internal.consumer.DefaultBuildLauncher.run(DefaultBuildLauncher.java:71)
            at com.bmuschko.gradle.docker.ToolingApiIntegrationTest.runTasks(ToolingApiIntegrationTest.groovy:82)
            at com.bmuschko.gradle.docker.AbstractDockerRemoteApiTaskIntegrationTest.Can create and execute custom remote API task with default extension values(AbstractDockerRemoteApiTaskIntegrationTest.groovy:24)

            Caused by:
            org.gradle.internal.exceptions.LocationAwareException: Build file '/Users/dresnick/proj/gdp2/build/integTest/build.gradle' line: 13
            A problem occurred evaluating root project 'integTest'.

                Caused by:
                org.gradle.api.GradleScriptException: A problem occurred evaluating root project 'integTest'.

                    Caused by:
                    org.gradle.api.internal.MissingMethodException: Could not find method https://192.168.59.103:2376() for arguments [/Users/dresnick/.boot2docker/certs/boot2docker-vm] on root project 'integTest'.

After a while it starts slowly going through dependencies (note the timestamps below):

21:58:34.859 [Test worker] INFO  o.g.i.r.t.DefaultCacheAwareExternalResourceAccessor - Found locally available resource with matching checksum: [https://repo1.maven.org/maven2/com/fasterxml/oss-parent/4/oss-parent-4.pom, /Users/dresnick/.m2/repository/com/fasterxml/oss-parent/4/oss-parent-4.pom]
    21:58:36.191 [Test worker] INFO  o.g.i.r.t.DefaultCacheAwareExternalResourceAccessor - Found locally available resource with matching checksum: [https://repo1.maven.org/maven2/org/glassfish/jersey/connectors/jersey-apache-connector/2.11/jersey-apache-connector-2.11.pom, /Users/dresnick/.m2/repository/org/glassfish/jersey/connectors/jersey-apache-connector/2.11/jersey-apache-connector-2.11.pom]
    21:58:37.490 [Test worker] INFO  o.g.i.r.t.DefaultCacheAwareExternalResourceAccessor - Found locally available resource with matching checksum: [https://repo1.maven.org/maven2/org/glassfish/jersey/connectors/project/2.11/project-2.11.pom, /Users/dresnick/.m2/repository/org/glassfish/jersey/connectors/project/2.11/project-2.11.pom]

A full log can be seen here:
https://gist.github.com/david-resnick/05abb0014ee46a09794d#file-gistfile1-txt

Existing Dockerfile, DockerBuildImage task: wildcards in COPY or ADD are not working

Hi!

I have a Dockerfile that issues the following command:

ADD ./build/libs/*.war /opt/tomcat/webapps/

I need that because war files include versioning in the name and change on every build.

I have also defined a DockerBuildImage task on my build.gradle file:

task dockerImg(type: DockerBuildImage) {
    dependsOn war
    inputDir = projectDir
    tag = 'test/hi'
}

The Dockerfile works correctly if I use the docker cli, but fails if I use gradle to launch the dockerImg task:

:dockerImg FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':dockerImg'.
> Source file /Users/carlos/Code/sla/berri/spring/boot/build/libs/*.war doesn't exist

I have also tried using COPY instead of ADD and fails in the same way.

Any clues?

Thanks very much in advance.

Can't start container (Invalid Argument)

Hi There,

Fantastic plugin - looks like exactly what we need.

When I'm using the DockerStartContainer task, I end up with the following output in the console:

Cannot start container cd582a584b9864ac750d0a5361481e77e4cd3cf94dd31e136710e93f94dd5e73: write /sys/fs/cgroup/cpuset/docker/cd582a584b9864ac750d0a5361481e77e4cd3cf94dd31e136710e93f94dd5e73/cpuset.cpus: invalid argument

My tasks look like:

task createEventSourceContainer(type: DockerCreateContainer) {
targetImageId { 'remmelt/docker-event-store:latest' }
}

task runEventSource(type: DockerStartContainer) {
dependsOn createEventSourceContainer
targetContainerId { createEventSourceContainer.getContainerId() }
println "Running up event source docker container"
}

task stopEventSource(type: DockerStopContainer) {
println "Stopping event source docker container"
targetContainerId { createEventSourceContainer.getContainerId() }
}

A bit of googling shows the following bug:

moby/moby#7941

is it possible that your own client suffers from the same bug?

Missing method to specify port bindings for DockerCreateContainer

Hopefully I'm just very dense but after struggling for a while and looking through code, I don't the proper way to map local port 1443 to exposed port 443. The API [1] references:

PortBindings - A map of exposed container ports and the host port they should map to. It should be specified in the form { <port>/<protocol>: [{ "HostPort": "<port>" }] }Take note that port is specified as a string and not an integer value.

The DockerCreateContainer class[2] doesn't reference this property. Is portSpecs support to fill this role?

Thanks for the consideration, and thanks for sharing your plugin.

[1] http://docs.docker.com/reference/api/docker_remote_api_v1.17/
[2] https://github.com/bmuschko/gradle-docker-plugin/blob/master/src/main/groovy/com/bmuschko/gradle/docker/tasks/container/DockerCreateContainer.groovy

DockerBuildImage conflates location of Dockerfile with build context

The root of the build context is the default location for the Dockerfile, but sometimes the Dockerfile is elsewhere, and not even called 'Dockerfile'. Currently, the plugin has only one attribute 'inputDir' to specify the location of the build context. There is no way to pass the specific path to the Dockerfile (i.e. what you would pass using the '-f' or '--file' option if running from the command line).

This is particularly important if you are programmatically building up the Dockerfile, and thus want to put it in the 'build' directory, but have a lot of non built, checked in artifacts that you want to copy into the image. Thus, in these cases, the 'inputDir' would want to be '$projectDir', while the --file would want to be something like '$buildDir/docker/Dockerfile'

You could certainly copy all the checked in artifacts to '$buildDir/docker', but as they are checked in, they are likely read-only, and gradle does not do well in incremental builds when copying read-only files. Better to leave them where they are (especially if they're large).

DockerStopContainer - "No value has been specified for property 'containerId'."

I followed sample exactly; but stop container task failed. However start container task works fine. Here is the stack trace, (i use 'com.bmuschko:gradle-docker-plugin:2.1')

...

  • What went wrong:
    A problem was found with the configuration of task ':docker:stopPostgresqlContainer'.

    No value has been specified for property 'containerId'.

  • Try:
    Run with --info or --debug option to get more log output.

  • Exception is:
    org.gradle.api.tasks.TaskValidationException: A problem was found with the configuration of task ':d
    ocker:stopPostgresqlContainer'.
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExec
    uter.java:55)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmpt
    ySourceFilesTaskExecuter.java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWit
    hNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExec
    uter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMo
    stOnceTaskExecuter.java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:
    306)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(Ab
    stractTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(Ab
    stractTaskPlanExecutor.java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTa
    skPlanExecutor.java:51)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.ja
    va:23)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.
    java:88)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java
    :29)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:3
    2)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:
    149)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProces
    sBuildActionExecuter.java:80)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecute
    r.java:36)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecute
    r.java:26)
    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51)
    at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:169)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineA
    ctionFactory.java:237)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineA
    ctionFactory.java:210)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.j
    ava:35)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.j
    ava:24)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFac
    tory.java:206)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFac
    tory.java:169)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33
    )
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22
    )
    at org.gradle.launcher.Main.doAction(Main.java:33)
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
    at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:30)
    at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:127)
    at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:55)
    Caused by: org.gradle.api.InvalidUserDataException: No value has been specified for property 'contai
    nerId'.
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExec
    uter.java:47)
    ... 43 more

Dependency issues trying to use DockerBuildImage task

Hi,

I get the following error when trying to use this plugin. I have setup both mavenCentral() and jcenter() repositories in my build.

build.gradle

apply plugin: 'com.bmuschko.docker-remote-api'

defaultTasks 'dockerise'
version '1.0'

buildscript {
    repositories { 
        mavenCentral()
        jcenter() 
    }
    dependencies {
        classpath 'com.bmuschko:gradle-docker-plugin:0.8.1'
    }
}

docker {
    url = 'https://localhost:4243'
    certPath = new File(System.properties['user.home'], '.docker')

    registry {
        url = 'https://localhost'
        username = 'bmuschko'
        password = 'pwd'
        email = '[email protected]'
    }
}

import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
task dockerise(type: DockerBuildImage) {
    tag = "my-image"
    inputDir = project.file("${projectDir}")
}

output

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':dockerise'.
> Could not resolve all dependencies for configuration ':dockerJava'.
   > Cannot resolve external dependency com.github.docker-java:docker-java:0.10.5 because no repositories are defined.
     Required by:
         :mbplc-base-image:0.0.1-SNAPSHOT
   > Cannot resolve external dependency org.slf4j:slf4j-simple:1.7.5 because no repositories are defined.
     Required by:
         :mbplc-base-image:0.0.1-SNAPSHOT

The full exception stack trace is here:

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':dockerise'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:305)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51)
    at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
    at org.gradle.launcher.Main.doAction(Main.java:33)
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
Caused by: org.gradle.api.artifacts.ResolveException: Could not resolve all dependencies for configuration ':dockerJava'.
    at org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration.rethrowFailure(DefaultLenientConfiguration.java:52)
    at org.gradle.api.internal.artifacts.ivyservice.DefaultResolvedConfiguration.rethrowFailure(DefaultResolvedConfiguration.java:36)
    at org.gradle.api.internal.artifacts.ivyservice.SelfResolvingDependencyResolver$FilesAggregatingResolvedConfiguration.rethrowFailure(SelfResolvingDependencyResolver.java:110)
    at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingArtifactDependencyResolver$ErrorHandlingResolvedConfiguration.rethrowFailure(ErrorHandlingArtifactDependencyResolver.java:180)
    at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationFileCollection.getFiles(DefaultConfiguration.java:444)
    at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.getFiles(DefaultConfiguration.java:205)
    at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration_Decorated.getFiles(Unknown Source)
    at org.gradle.api.internal.BeanDynamicObject$MetaClassAdapter.getProperty(BeanDynamicObject.java:153)
    at org.gradle.api.internal.BeanDynamicObject.getProperty(BeanDynamicObject.java:107)
    at org.gradle.api.internal.CompositeDynamicObject.getProperty(CompositeDynamicObject.java:78)
    at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration_Decorated.getProperty(Unknown Source)
    at com.bmuschko.gradle.docker.tasks.AbstractDockerRemoteApiTask.start(AbstractDockerRemoteApiTask.groovy:47)
    at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:218)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)
    at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:579)
    at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:562)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 44 more
Caused by: org.gradle.internal.resolve.ModuleVersionNotFoundException: Cannot resolve external dependency com.github.docker-java:docker-java:0.10.5 because no repositories are defined.
Required by:
    :mbplc-base-image:0.0.1-SNAPSHOT
    at org.gradle.api.internal.artifacts.ivyservice.ivyresolve.NoRepositoriesResolver.resolve(NoRepositoriesResolver.java:53)
    at org.gradle.api.internal.artifacts.ivyservice.projectmodule.ProjectDependencyResolver.resolve(ProjectDependencyResolver.java:48)
    at org.gradle.api.internal.artifacts.ivyservice.VersionForcingDependencyToModuleResolver.resolve(VersionForcingDependencyToModuleResolver.java:50)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder$ModuleVersionSelectorResolveState.resolveModuleRevisionId(DependencyGraphBuilder.java:860)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder$DependencyEdge.resolveModuleRevisionId(DependencyGraphBuilder.java:232)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder.traverseGraph(DependencyGraphBuilder.java:119)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder.resolveDependencyGraph(DependencyGraphBuilder.java:94)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.graph.DependencyGraphBuilder.resolve(DependencyGraphBuilder.java:84)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultDependencyResolver$1.execute(DefaultDependencyResolver.java:122)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultDependencyResolver$1.execute(DefaultDependencyResolver.java:88)
    at org.gradle.internal.Transformers$4.transform(Transformers.java:136)
    at org.gradle.api.internal.artifacts.ivyservice.DefaultIvyContextManager.withIvy(DefaultIvyContextManager.java:61)
    at org.gradle.api.internal.artifacts.ivyservice.DefaultIvyContextManager.withIvy(DefaultIvyContextManager.java:39)
    at org.gradle.api.internal.artifacts.ivyservice.resolveengine.DefaultDependencyResolver.resolve(DefaultDependencyResolver.java:88)
    at org.gradle.api.internal.artifacts.ivyservice.CacheLockingArtifactDependencyResolver$1.run(CacheLockingArtifactDependencyResolver.java:42)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:187)
    at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:175)
    at org.gradle.cache.internal.DefaultPersistentDirectoryStore.useCache(DefaultPersistentDirectoryStore.java:106)
    at org.gradle.cache.internal.DefaultCacheFactory$ReferenceTrackingCache.useCache(DefaultCacheFactory.java:187)
    at org.gradle.api.internal.artifacts.ivyservice.DefaultCacheLockingManager.useCache(DefaultCacheLockingManager.java:64)
    at org.gradle.api.internal.artifacts.ivyservice.CacheLockingArtifactDependencyResolver.resolve(CacheLockingArtifactDependencyResolver.java:40)
    at org.gradle.api.internal.artifacts.ivyservice.SelfResolvingDependencyResolver.resolve(SelfResolvingDependencyResolver.java:45)
    at org.gradle.api.internal.artifacts.ivyservice.ShortcircuitEmptyConfigsArtifactDependencyResolver.resolve(ShortcircuitEmptyConfigsArtifactDependencyResolver.java:55)
    at org.gradle.api.internal.artifacts.ivyservice.ErrorHandlingArtifactDependencyResolver.resolve(ErrorHandlingArtifactDependencyResolver.java:47)
    at org.gradle.api.internal.artifacts.ivyservice.DefaultConfigurationResolver.resolve(DefaultConfigurationResolver.java:46)
    at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.resolveNow(DefaultConfiguration.java:250)
    at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.getResolvedConfiguration(DefaultConfiguration.java:240)
    at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration_Decorated.getResolvedConfiguration(Unknown Source)
    at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationFileCollection.getFiles(DefaultConfiguration.java:442)

NPE on DockerPushImage

Hi,

I found your nifty plugin, and am giving it a whirl.

I have a task in my build.gradle that looks like this:

task pushDockerImage(type: DockerPushImage) {
imageId = 'bluejazz-update-server:'+version.tag()
}

Here is the console log from my Jenkins job at point of failure:

...

  • ./gradlew pushDockerImage --rerun-tasks --stacktrace
    :pushDockerImage
    Pushing image ID 'bluejazz-update-server:US317-1.0.18'.
    :pushDockerImage FAILED
    FAILURE: Build failed with an exception.
  • What went wrong:
    Execution failed for task ':pushDockerImage'.

    java.lang.NullPointerException (no error message)

And below is the stack trace. Can you tell me if I have wire anything up incorrectly, or if you think there are other issues lurking?

Caused by: java.lang.NullPointerException
at com.github.dockerjava.jaxrs.PushImageCmdExec.name(PushImageCmdExec.java:41)
at com.github.dockerjava.jaxrs.PushImageCmdExec.execute(PushImageCmdExec.java:27)
at com.github.dockerjava.jaxrs.PushImageCmdExec.execute(PushImageCmdExec.java:17)
at com.github.dockerjava.jaxrs.AbstrDockerCmdExec.exec(AbstrDockerCmdExec.java:47)
at com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:26)
at com.github.dockerjava.core.command.PushImageCmdImpl.exec(PushImageCmdImpl.java:51)
at com.github.dockerjava.api.command.PushImageCmd$exec.call(Unknown Source)
at com.bmuschko.gradle.docker.tasks.image.DockerPushImage.runRemoteCommand(DockerPushImage.groovy:22)
at com.bmuschko.gradle.docker.tasks.AbstractDockerRemoteApiTask$_start_closure1.doCall(AbstractDockerRemoteApiTask.groovy:66)
at com.bmuschko.gradle.docker.utils.DockerThreadContextClassLoader.withClasspath(DockerThreadContextClassLoader.groovy:35)
at com.bmuschko.gradle.docker.utils.ThreadContextClassLoader$withClasspath.call(Unknown Source)
at com.bmuschko.gradle.docker.tasks.AbstractDockerRemoteApiTask.start(AbstractDockerRemoteApiTask.groovy:65)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:218)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:579)
at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:562)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
... 47 more

Cache dependencies during Docker Build

Right now with the Application plugin, then entire project installDir is copied as a single ADD step to the Docker container. It would be much more efficient if the ${installDir}/lib path (excluding the project jar) was copied in an ADD first, then the application jar (would also need to copy the ${installDir}/bin directory).

This would allow Docker to cache the layer of the dependencies between builds when dependencies aren't changing thus increasing the build speed and saving space on devices since the resulting layer that is changing would be smaller (only the size of the application jar).

Request to read registry credentials from .dockercfg

Is it possible to have the plugin read registry credentials from the .dockercfg file if it exists as part of the push? Maybe something like adding a 'file' property to DockerRegistryCredentials to load them from a given file at runtime. Or maybe simpler have a boolean that when flipped will attempt to check the users .dockercfg file for credentials if they exist?

Thoughts?

Configuring javaApplication image tag in multi-module project fails

I have a multi-module project consisting out of two modules. There is a parent Gradle build script and a parent gradle.properties file, where I define my project properties and the settings.gradle.

The modules are essentially the same, just a very small spring-boot helloworld application. The will be acting as a AMQP producer and a AMQP consumer.

The build.gradle files for both modules are essentially the same:

buildscript {
  repositories {
    mavenCentral()
    jcenter()
  }
  dependencies {
    classpath "org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion"
    classpath "com.bmuschko:gradle-docker-plugin:$dockerVersion"
  }
}

apply plugin: 'java'
apply plugin: 'spring-boot'
apply plugin: 'com.bmuschko.docker-java-application'

repositories {
  mavenCentral()
}

dependencies {
  compile('org.springframework.boot:spring-boot-starter-web') {
    exclude module: 'spring-boot-starter-tomcat'
  }
  compile('org.springframework.boot:spring-boot-starter-jetty')
  compile('org.springframework.boot:spring-boot-starter-actuator')
}

docker {
  url = property 'dockerHostUrl'

  javaApplication {
    baseImage = property 'baseImage'
    maintainer = property 'maintainer'
    port = property('appPort') as Integer
    tag = "$group/$project.name:$version"
  }
}

Running ../gradlew dockerBuildImage I can see that the tag used falls back to the default.

When I remove one of the modules from the settings.gradle file, the correct tag is picked up.

Using the default tag is sufficient for now, but we really like to configure it to have the group in it.

DockerCreateContainer task in gradle

I have added the DockerCreateContainer task and want to run a image.
Something like this
docker run -d -p 80:80 -p 8125:8125/udp -p 8126:8126 --name kamon-grafana-dashboard kamon/grafana_graphite

added task in gradle script
task createMyAppContainer(type: DockerCreateContainer) {
targetImageId { 2124414a69ae }
exposedPorts =['80/tcp':80,'8125/udp':8125,'8126':8126]
}

Though as per remote API it may be
exposedPorts = {"80/tcp":{80},"8125/udp":{8125},"8126/tcp":{8126}}

can anyone guide /point themistake?

dockerDistTar does not properly derive from (baseImage) configuration, when configuring both docker and dockerDistTar

If I don't use a dockerDistTar configuration, the from is derived from the baseImage configuration of the docker task. But if I have to use dockerDistTar (say, to add files to dockerfile), the plugin seems to require a configuration for from in the dockerDistTar task in addition to the baseImage configuration in the docker closure.

dockerDistTar { 
    from 'dockerfile/java:openjdk-7-jdk'
    addFile 'foo', 'bar'
    addFile 'baz', 'foo'
}

docker { 
    javaApplication { 
        baseImage = 'dockerfile/java:openjdk-7-jdk'
    }
}

credentials { 
    username = 'johndoe'
    password = 'pwd'
    email = '[email protected]'
}

}

Add support for fig / docker compose.

We use fig (http://www.fig.sh) in a few of our projects and I was considering creating a simple plugin to run fig commands. It also looks like a top-level docker command (but separate binary?) named 'compose' will be replacing fig at some point (moby/moby#9694).

Do you think it makes sense to add support for fig / compose in this gradle plugin, or does that blow up the scope of this plugin too much?

Can't push tagged image created with docker-java-application to private repo

This configuration

docker {
    javaApplication {
        tag = 'private-registry.company.com:5000/namespace/project:latest'
    }
}

fails with this outcome:

...
:dockerPushImage
Pushing image with name 'private-registry.company.com:5000/namespace/project:latest'.
:dockerPushImage FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':dockerPushImage'.
> Invalid repository name (facts-repo:latest), only [a-z0-9-_.] are allowed

This can be fixed by overriding the dockerPushImage convention defaults:

dockerPushImage.imageName = 'private-registry.company.com:5000/namespace/project'
dockerPushImage.tag = 'latest'

The real problem here is the confusing way docker chose to have images named, tagged and pushed. Sometimes a tag is just a tag, while other times it includes the registry, namespace and "repository".

How to customise Dockerfile created by docker-java-application plugin

I am creating a Docker image for a Spring Boot java application. I can control what base image to use, but I cannot apply additonal steps to the Dockerfile, like 'ADD'.

What I am trying to achieve is to add a self signed CA certificate to the cacerts keystore of the JDK installed on the final image.

Currently the only solution visible to me is to create a separate base image with the cert included and reference this one from my java application docker image.

It would be great to have some hook to do some additional things to the created Dockerfile before the image is build, for example something like this:

docker {
  url = 'http://docker.repository.com'

  javaApplication {
    baseImage = 'hanswesterbeek/google-debian-oracle-jdk:8'
    maintainer = property 'maintainer'

    dockerfile {
      env ANY_VAR=xyz
    }
  }
}

or hook into the Dockerfile task somehow for not having to rewrite all the stuff the java application plugin does.

docker {
  url = 'http://docker.repository.com'

  javaApplication {
    baseImage = 'hanswesterbeek/google-debian-oracle-jdk:8'
    maintainer = property 'maintainer'
  }

  dockerfileAdditions {
      env ANY_VAR=xyz
   }
}

Can not mount host volume into container

When creating a container using the DockerCreateContainer task, I need to mount a host directory as a volume in the container.

I tried this syntax:

task createDatabaseContainer(type: DockerCreateContainer) {
    imageId = "postgres"
    volumes = [ "${projectDir}/src/main/docker:/docker-entrypoint-initdb.d", "/var/lib/postgresql/data" ]
}

This doesn't do the host mapping though and just creates a volume inside the container including the colon. Am I missing something or is this not supported?

Error when pushing to Docker Registry 2.0

I get following error when trying to push a Docker Registry 2.0. I have changed the value of dockerRegistryUrl to point it to v2 registry, however it seems internally, you are still expecting it to be sent to v1 registry:

docker {
    registryCredentials {
        url = "http://$dockerRegistryUrl/v2/myapp"
    }
}

You can refer to registry 2.0 API here.

Caused by: com.github.dockerjava.api.InternalServerErrorException:  v1 ping attempt failed with error: Get https://foo.bar.corp:5000/v1/_ping: Forbidden. If this private registry supports only HTTP or HTTPS with an unknown CA certificate, please add `--insecure-registry mo-603021cfa.mo.sap.corp:5000` to the daemon's arguments. In the case of HTTPS, if you have access to the registry's CA certificate, no need for the flag; simply place the CA certificate at /etc/docker/certs.d/mo-603021cfa.mo.sap.corp:5000/ca.crt

        at com.github.dockerjava.core.util.ResponseStatusExceptionFilter.filter(ResponseStatusExceptionFilter.java:54)
        at org.glassfish.jersey.client.ClientFilteringStages$ResponseFilterStage.apply(ClientFilteringStages.java:134)
        at org.glassfish.jersey.client.ClientFilteringStages$ResponseFilterStage.apply(ClientFilteringStages.java:123)
        at org.glassfish.jersey.process.internal.Stages.process(Stages.java:171)
        at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:251)
        at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:667)
        at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:664)
        at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
        at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
        at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
        at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424)
        at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:664)
        at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:424)
        at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:333)
        at com.github.dockerjava.jaxrs.PushImageCmdExec.execute(PushImageCmdExec.java:44)
        at com.github.dockerjava.jaxrs.PushImageCmdExec.execute(PushImageCmdExec.java:28)
        at com.github.dockerjava.jaxrs.AbstrDockerCmdExec.exec(AbstrDockerCmdExec.java:57)
        at com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:29)
        at com.github.dockerjava.core.command.PushImageCmdImpl.exec(PushImageCmdImpl.java:65)
        at com.github.dockerjava.api.command.PushImageCmd$exec$0.call(Unknown Source)
        at com.bmuschko.gradle.docker.tasks.image.DockerPushImage.runRemoteCommand(DockerPushImage.groovy:64)
        at com.bmuschko.gradle.docker.tasks.AbstractDockerRemoteApiTask$_start_closure1.doCall(AbstractDockerRemoteApiTask.groovy:48)
        at com.bmuschko.gradle.docker.utils.DockerThreadContextClassLoader.withClasspath(DockerThreadContextClassLoader.groovy:37)
        at com.bmuschko.gradle.docker.utils.ThreadContextClassLoader$withClasspath.call(Unknown Source)
        at com.bmuschko.gradle.docker.tasks.AbstractDockerRemoteApiTask.start(AbstractDockerRemoteApiTask.groovy:47)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:218)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)
        at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
        ... 56 more

Output of docker command : example buid

Hi
Sometime it is very important to monitor docker output.
When Im running docker build with the plugin my output :

Building image from folder 'jdk-8u45'.
Using tag 'test/jdk' for image.
Created image with ID '8e934741e572'.

What is expected it to see regular docker output to monitor right execution of layers, where docker using cache etc ...

Thanks.

How to push to private registry

What I am trying to achieve is to push a created image to our companies private Docker registry which is backed by Artifactory. Given the following build script

plugins {
  id "com.bmuschko.docker-remote-api" version "2.0.2"
}

docker {
  url = property 'dockerHostUrl'
}

import com.bmuschko.gradle.docker.tasks.image.DockerBuildImage
import com.bmuschko.gradle.docker.tasks.image.DockerPushImage

task buildMysqlImage(type: DockerBuildImage) {
  inputDir = file("src")
  tag = 'docker.artifactory.it.ewerk.com/com_any_domain/mysql:1.0.0-snapshot'
  remove = true
}

task pushMysqlImage(type: DockerPushImage) {
  imageName = "docker.artifactory.it.ewerk.com/com_any_domain/mysql"
}

pushMysqlImage.dependsOn buildMysqlImage

Running gradlew pushMysqlImage -i -S shows me that the image gets created correctly:

$> root@base-vm:~# docker images
REPOSITORY                                              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
docker.artifactory.it.ewerk.com/com_any_company/mysql   1.0.0-snapshot      19c4a1473fa2        12 minutes ago      214.5 MB

Pushing the images also returns as success, but the image is not available at Artifactory. Here is the output from the tasks:

Executing task ':bdwh-mi-mysql-image:buildMysqlImage' (up-to-date check took 0.0 secs) due to:
  Task has not declared any outputs.
Building image from folder '/Users/h.stolzenberg/dev/var/lib/idea/bdwh-cluster-prototype/bdwh-mi-mysql-image/src'.
Using tag 'docker.artifactory.it.ewerk.com/com_any_company/mysql:1.0.0-snapshot' for image.
Running in a non-OSGi environment
"No custom request executor provider registrations found - using default: [org.glassfish.jersey.client.ClientAsyncExecutorFactory$1]."
1 * Client response received on thread main
1 < 200
1 < Content-Length: -1
1 < Content-Type: application/json
1 < Date: Tue, 17 Mar 2015 16:51:04 GMT
1 < Transfer-Encoding: chunked
{"stream":"Step 0 : FROM mysql:5.5\n"}


Step 0 : FROM mysql:5.5

 ---> c8defdc7b8fa

Step 1 : MAINTAINER Holger Stolzenberg "[email protected]"

 ---> Using cache

 ---> 9b85a63b8c40

Step 2 : ADD default.cnf /etc/mysql/conf.d/default.cnf

 ---> Using cache

 ---> 19c4a1473fa2

Successfully built 19c4a1473fa2

Created image with ID '19c4a1473fa2'.
:bdwh-mi-mysql-image:buildMysqlImage (Thread[main,5,main]) completed. Took 1.524 secs.
:bdwh-mi-mysql-image:pushMysqlImage (Thread[main,5,main]) started.
:bdwh-mi-mysql-image:pushMysqlImage
Executing task ':bdwh-mi-mysql-image:pushMysqlImage' (up-to-date check took 0.0 secs) due to:
  Task has not declared any outputs.
Pushing image with name 'docker.artifactory.it.ewerk.com/com_any_company/mysql'.
Running in a non-OSGi environment
"No custom request executor provider registrations found - using default: [org.glassfish.jersey.client.ClientAsyncExecutorFactory$1]."
1 * Sending client request on thread main
1 > POST http://127.0.0.1:2375/images/docker.artifactory.it.ewerk.com/com_any_company/mysql/push?tag=1.0.0-snapshot
1 > Accept: application/json
1 > Content-Type: application/json
1 > X-Registry-Auth: eyJ1c2VybmFtZSI6Imguc3RvbHplbmJlcmciLCJwYXNzd29yZCI6bnVsbCwiZW1haWwiOm51bGwsInNlcnZlcmFkZHJlc3MiOiJodHRwczovL2luZGV4LmRvY2tlci5pby92MS8ifQ==
"javax.ws.rs.core.Response"

2 * Client response received on thread main
2 < 200
2 < Content-Length: -1
2 < Content-Type: application/json
2 < Date: Tue, 17 Mar 2015 16:51:05 GMT
2 < Transfer-Encoding: chunked
{"status":"The push refers to a repository [docker.artifactory.it.ewerk.com/com_any_company/mysql] (len: 1)"}


The push refers to a repository [docker.artifactory.it.ewerk.com/com_any_company/mysql] (len: 1).
Sending image list.
}.
:bdwh-mi-mysql-image:pushMysqlImage (Thread[main,5,main]) completed. Took 1.12 secs.

BUILD SUCCESSFUL

Total time: 7.741 secs
Stopped 0 compiler daemon(s).

Issuing the command docker push docker.artifactory.it.ewerk.com/com_any_company/mysql directly works fine and the image gets available at the Artifactory server.

So, how do I have to configure the plugin in order to push the given image to the private registry.

Case typo prevents javaApplication configuration to applied

There is a typo in DockerJavaApplicationPlugin.configureExtension. In line 64 DockerExtension is typed with a upper case 'D'. In my multi module project this causes the javaApplication configuration to not be applied. Changing that to a lower case 'd' fixes that.

A pull request is on the way.

Example

Is there an example app? The source in the readme doesn't work for me - at least not with the Dockerfile I have.

buildMyAppImage succeeds but then createMyAppContainer fails:

Execution failed for task ':createMyAppContainer'.
> com.kpelykh.docker.client.NotFoundException: test/contact is an unrecognized image. Please pull the image first.

If I run docker directly then I can create and run the container.

pushing to quay.io fails when using docker 1.5+

Seems that credentials get screwy somehow, or possibly docker changed how they are passed/formatted, when using docker version 1.5 or greater. We've also tested with all versions of gradle-docker-plugin from 2.1 onwards. Below is the debug output when attempting to push. We're using gradle 2.3 and running on RedHat7. Any ideas? Is this a known issue?

def quayCredentials = new DockerRegistryCredentials(url: quayHost, username: quay_username, password: quay_password, email: '')

task publishQuay(type: DockerPushImage) { dependsOn tagImageForQuay imageName "${quayHost}/${quayNamespace}/${dockerName}" tag "${dockerTag}" registryCredentials quayCredentials }

':publishQuay'
build 23-Apr-2015 11:17:36 14:17:36.271 [LIFECYCLE] [class org.gradle.TaskExecutionLogger] :publishQuay FAILED
build 23-Apr-2015 11:17:36 14:17:36.271 [INFO] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] :publishQuay (Thread[main,5,main]) completed. Took 1.044 secs.
build 23-Apr-2015 11:17:36 14:17:36.271 [DEBUG] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] Task worker [Thread[main,5,main]] finished, busy: 9 mins 12.899 secs, idle: 0.005 secs
error 23-Apr-2015 11:17:36 14:17:36.275 [ERROR] [org.gradle.BuildExceptionReporter]
error 23-Apr-2015 11:17:36 14:17:36.276 [ERROR] [org.gradle.BuildExceptionReporter] FAILURE: Build failed with an exception.
error 23-Apr-2015 11:17:36 14:17:36.276 [ERROR] [org.gradle.BuildExceptionReporter]
error 23-Apr-2015 11:17:36 14:17:36.276 [ERROR] [org.gradle.BuildExceptionReporter] * What went wrong:
error 23-Apr-2015 11:17:36 14:17:36.276 [ERROR] [org.gradle.BuildExceptionReporter] Execution failed for task ':publishQuay'.
error 23-Apr-2015 11:17:36 14:17:36.276 [ERROR] [org.gradle.BuildExceptionReporter] > Error: Status 403 trying to push repository test/devops: {"info_url": "http://docs.quay.io/issues/no-repo-write-permission.html", "error": "You do not have permission to modify repository test/devops"}
error 23-Apr-2015 11:17:36 14:17:36.276 [ERROR] [org.gradle.BuildExceptionReporter]
error 23-Apr-2015 11:17:36 14:17:36.276 [ERROR] [org.gradle.BuildExceptionReporter] * Exception is:
error 23-Apr-2015 11:17:36 14:17:36.277 [ERROR] [org.gradle.BuildExceptionReporter] org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':publishQuay'.
error 23-Apr-2015 11:17:36 14:17:36.277 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
error 23-Apr-2015 11:17:36 14:17:36.277 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
error 23-Apr-2015 11:17:36 14:17:36.277 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
error 23-Apr-2015 11:17:36 14:17:36.277 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
error 23-Apr-2015 11:17:36 14:17:36.277 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
error 23-Apr-2015 11:17:36 14:17:36.278 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
error 23-Apr-2015 11:17:36 14:17:36.278 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
error 23-Apr-2015 11:17:36 14:17:36.278 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
error 23-Apr-2015 11:17:36 14:17:36.278 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
error 23-Apr-2015 11:17:36 14:17:36.278 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:306)
error 23-Apr-2015 11:17:36 14:17:36.278 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
error 23-Apr-2015 11:17:36 14:17:36.278 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
error 23-Apr-2015 11:17:36 14:17:36.278 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
error 23-Apr-2015 11:17:36 14:17:36.278 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
error 23-Apr-2015 11:17:36 14:17:36.278 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
error 23-Apr-2015 11:17:36 14:17:36.279 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
error 23-Apr-2015 11:17:36 14:17:36.279 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
error 23-Apr-2015 11:17:36 14:17:36.279 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
error 23-Apr-2015 11:17:36 14:17:36.279 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
error 23-Apr-2015 11:17:36 14:17:36.279 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
error 23-Apr-2015 11:17:36 14:17:36.279 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
error 23-Apr-2015 11:17:36 14:17:36.279 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
error 23-Apr-2015 11:17:36 14:17:36.279 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
error 23-Apr-2015 11:17:36 14:17:36.279 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
error 23-Apr-2015 11:17:36 14:17:36.280 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
error 23-Apr-2015 11:17:36 14:17:36.280 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
error 23-Apr-2015 11:17:36 14:17:36.280 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
error 23-Apr-2015 11:17:36 14:17:36.280 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
error 23-Apr-2015 11:17:36 14:17:36.280 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
error 23-Apr-2015 11:17:36 14:17:36.280 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
error 23-Apr-2015 11:17:36 14:17:36.280 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51)
error 23-Apr-2015 11:17:36 14:17:36.280 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:169)
error 23-Apr-2015 11:17:36 14:17:36.280 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
error 23-Apr-2015 11:17:36 14:17:36.280 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
error 23-Apr-2015 11:17:36 14:17:36.281 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
error 23-Apr-2015 11:17:36 14:17:36.281 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
error 23-Apr-2015 11:17:36 14:17:36.281 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
error 23-Apr-2015 11:17:36 14:17:36.281 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
error 23-Apr-2015 11:17:36 14:17:36.281 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
error 23-Apr-2015 11:17:36 14:17:36.281 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
error 23-Apr-2015 11:17:36 14:17:36.281 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.Main.doAction(Main.java:33)
error 23-Apr-2015 11:17:36 14:17:36.281 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
error 23-Apr-2015 11:17:36 14:17:36.281 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
error 23-Apr-2015 11:17:36 14:17:36.281 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
error 23-Apr-2015 11:17:36 14:17:36.282 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
error 23-Apr-2015 11:17:36 14:17:36.282 [ERROR] [org.gradle.BuildExceptionReporter] Caused by: org.gradle.api.GradleException: Error: Status 403 trying to push repository test/devops: {"info_url": "http://docs.quay.io/issues/no-repo-write-permission.html", "error": "You do not have permission to modify repository test/devops"}
error 23-Apr-2015 11:17:36 14:17:36.282 [ERROR] [org.gradle.BuildExceptionReporter] at com.bmuschko.gradle.docker.response.PushImageResponseHandler$_handle_closure1.doCall(PushImageResponseHandler.groovy:45)
error 23-Apr-2015 11:17:36 14:17:36.282 [ERROR] [org.gradle.BuildExceptionReporter] at com.bmuschko.gradle.docker.response.PushImageResponseHandler.handle(PushImageResponseHandler.groovy:33)
error 23-Apr-2015 11:17:36 14:17:36.282 [ERROR] [org.gradle.BuildExceptionReporter] at com.bmuschko.gradle.docker.response.PushImageResponseHandler.handle(PushImageResponseHandler.groovy)
error 23-Apr-2015 11:17:36 14:17:36.282 [ERROR] [org.gradle.BuildExceptionReporter] at com.bmuschko.gradle.docker.response.ResponseHandler$handle.call(Unknown Source)
error 23-Apr-2015 11:17:36 14:17:36.282 [ERROR] [org.gradle.BuildExceptionReporter] at com.bmuschko.gradle.docker.response.ResponseHandler$handle.call(Unknown Source)
error 23-Apr-2015 11:17:36 14:17:36.282 [ERROR] [org.gradle.BuildExceptionReporter] at com.bmuschko.gradle.docker.tasks.image.DockerPushImage.runRemoteCommand(DockerPushImage.groovy:65)
error 23-Apr-2015 11:17:36 14:17:36.282 [ERROR] [org.gradle.BuildExceptionReporter] at com.bmuschko.gradle.docker.tasks.AbstractDockerRemoteApiTask$_start_closure1.doCall(AbstractDockerRemoteApiTask.groovy:48)
error 23-Apr-2015 11:17:36 14:17:36.283 [ERROR] [org.gradle.BuildExceptionReporter] at com.bmuschko.gradle.docker.utils.DockerThreadContextClassLoader.withClasspath(DockerThreadContextClassLoader.groovy:37)
error 23-Apr-2015 11:17:36 14:17:36.283 [ERROR] [org.gradle.BuildExceptionReporter] at com.bmuschko.gradle.docker.utils.ThreadContextClassLoader$withClasspath.call(Unknown Source)
error 23-Apr-2015 11:17:36 14:17:36.283 [ERROR] [org.gradle.BuildExceptionReporter] at com.bmuschko.gradle.docker.tasks.AbstractDockerRemoteApiTask.start(AbstractDockerRemoteApiTask.groovy:47)
error 23-Apr-2015 11:17:36 14:17:36.283 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)
error 23-Apr-2015 11:17:36 14:17:36.283 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:218)
error 23-Apr-2015 11:17:36 14:17:36.283 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)
error 23-Apr-2015 11:17:36 14:17:36.283 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200)
error 23-Apr-2015 11:17:36 14:17:36.283 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585)
error 23-Apr-2015 11:17:36 14:17:36.283 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568)
error 23-Apr-2015 11:17:36 14:17:36.283 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
error 23-Apr-2015 11:17:36 14:17:36.284 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
error 23-Apr-2015 11:17:36 14:17:36.284 [ERROR] [org.gradle.BuildExceptionReporter] ... 44 more
error 23-Apr-2015 11:17:36 14:17:36.284 [ERROR] [org.gradle.BuildExceptionReporter]
build 23-Apr-2015 11:17:36 14:17:36.284 [LIFECYCLE] [org.gradle.BuildResultLogger]
build 23-Apr-2015 11:17:36 14:17:36.284 [LIFECYCLE] [org.gradle.BuildResultLogger] BUILD FAILED
build 23-Apr-2015 11:17:36 14:17:36.284 [LIFECYCLE] [org.gradle.BuildResultLogger]
build 23-Apr-2015 11:17:36 14:17:36.284 [LIFECYCLE] [org.gradle.BuildResultLogger] Total time: 9 mins 18.573 secs

Incomplete teardown after integ tests fail

I ran integ tests and had failures (see #48 )

These test runs left a number of containers running:

$ docker ps
CONTAINER ID        IMAGE                 COMMAND                CREATED             STATUS              PORTS                    NAMES
ad8d1412f526        076bacbb6b96:latest   "/integTest-1.0/bin/   5 days ago          Up 5 days           9090/tcp                 backstabbing_bardeen
666fb29e1042        d8ce63b66f40:latest   "/integTest-1.0/bin/   5 days ago          Up 5 days           9090/tcp                 lonely_stallman
b01959e7b194        46cd591090fc:latest   "/integTest-1.0/bin/   5 days ago          Up 5 days           8080/tcp                 focused_bardeen
9ffcfb88b711        registry:0.9.1        "docker-registry"      5 days ago          Up 5 days           0.0.0.0:5000->5000/tcp   trusting_torvalds
8ff79a551fd8        0dd36283f841:latest   "/integTest-1.0/bin/   5 days ago          Up 5 days           9090/tcp                 sick_heisenberg
c3ac01024eb9        41cce09cf56e:latest   "/integTest-1.0/bin/   5 days ago          Up 5 days           9090/tcp                 ecstatic_davinci
458e22cb239f        8ca9b81ab460:latest   "/integTest-1.0/bin/   5 days ago          Up 5 days           8080/tcp                 mad_galileo
ba9ad0243e38        b20079e00fa3:latest   "/integTest-1.0/bin/   5 days ago          Up 5 days           9090/tcp                 furious_mccarthy
b4909f0fec98        ce20a1da03bf:latest   "/integTest-1.0/bin/   5 days ago          Up 5 days           9090/tcp                 evil_galileo
6aa665672769        13f8f8167d8d:latest   "/integTest-1.0/bin/   5 days ago          Up 5 days           8080/tcp                 distracted_leakey
42853069d998        ef85f38e7e76:latest   "/integTest-1.0/bin/   5 days ago          Up 5 days           9090/tcp                 focused_mestorf
7a5b499dd2cc        9ad0d3301fdd:latest   "/integTest-1.0/bin/   5 days ago          Up 5 days           9090/tcp                 hopeful_ptolemy
5f6c5ed78406        c1f9b177c68f:latest   "/integTest-1.0/bin/   5 days ago          Up 5 days           8080/tcp                 backstabbing_hypatia
e236183b98d0        66c02a5c7a15:latest   "/integTest-1.0/bin/   6 days ago          Up 5 days           9090/tcp                 dreamy_lovelace
ae3f3343f599        acb2e35f10b1:latest   "/integTest-1.0/bin/   6 days ago          Up 5 days           9090/tcp                 elated_franklin
79599dc33695        22bb207405ab:latest   "/integTest-1.0/bin/   6 days ago          Up 5 days           8080/tcp                 fervent_babbage

Doesn't support adding of remote files

Hi - I cannot get this plugin to work if the Dockerfile adds remote files e.g. ADD http://.....

It throws an exception that implies it is looking for this file on in the build directory.

11:55:30.803 [ERROR] [org.gradle.BuildExceptionReporter] * What went wrong:
11:55:30.803 [ERROR] [org.gradle.BuildExceptionReporter] Execution failed for task ':buildImage'.
11:55:30.804 [ERROR] [org.gradle.BuildExceptionReporter] > Could not call AbstractDockerTask.start() on task ':buildImage'
11:55:30.804 [ERROR] [org.gradle.BuildExceptionReporter]
11:55:30.805 [ERROR] [org.gradle.BuildExceptionReporter] * Exception is:
11:55:30.805 [ERROR] [org.gradle.BuildExceptionReporter] org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':buildImage'.
11:55:30.806 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
11:55:30.806 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
11:55:30.806 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
11:55:30.807 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
11:55:30.807 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
11:55:30.807 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
11:55:30.808 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
11:55:30.808 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
11:55:30.808 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
11:55:30.809 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:283)
11:55:30.809 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
11:55:30.809 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
11:55:30.810 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
11:55:30.810 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$1.run(DefaultTaskPlanExecutor.java:33)
11:55:30.810 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.internal.Factories$1.create(Factories.java:22)
11:55:30.811 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:214)
11:55:30.811 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:276)
11:55:30.811 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.cache.internal.DefaultPersistentDirectoryStore.longRunningOperation(DefaultPersistentDirectoryStore.java:142)
11:55:30.812 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.changedetection.state.DefaultTaskArtifactStateCacheAccess.longRunningOperation(DefaultTaskArtifactStateCacheAccess.java:78)
11:55:30.812 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:31)
11:55:30.812 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:86)
11:55:30.813 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
11:55:30.813 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
11:55:30.814 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
11:55:30.814 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67)
11:55:30.814 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
11:55:30.815 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
11:55:30.815 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:54)
11:55:30.815 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:166)
11:55:30.816 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
11:55:30.816 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81)
11:55:30.816 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64)
11:55:30.817 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
11:55:30.817 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
11:55:30.817 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:35)
11:55:30.818 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
11:55:30.818 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50)
11:55:30.819 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
11:55:30.819 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:201)
11:55:30.820 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:174)
11:55:30.820 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:170)
11:55:30.821 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:139)
11:55:30.821 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
11:55:30.822 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
11:55:30.822 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.Main.doAction(Main.java:46)
11:55:30.823 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
11:55:30.823 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.Main.main(Main.java:37)
11:55:30.824 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50)
11:55:30.824 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32)
11:55:30.825 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
11:55:30.825 [ERROR] [org.gradle.BuildExceptionReporter] Caused by: org.gradle.api.GradleException: Could not call AbstractDockerTask.start() on task ':buildImage'
11:55:30.826 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.util.JavaMethod.invoke(JavaMethod.java:69)
11:55:30.826 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:219)
11:55:30.827 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:212)
11:55:30.827 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:201)
11:55:30.828 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:527)
11:55:30.828 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:510)
11:55:30.829 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
11:55:30.829 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
11:55:30.829 [ERROR] [org.gradle.BuildExceptionReporter] ... 49 more
11:55:30.830 [ERROR] [org.gradle.BuildExceptionReporter] Caused by: com.kpelykh.docker.client.DockerException: Source file /Users/jeff.bannister/src/corestream/build/https:/nexus.gamesys.co.uk/service/local/repositories/gamesys-releases/content/gamesys/coreplatform/core-services/2.4.0/core-services-2.4.0.jar doesnt' exist
11:55:30.830 [ERROR] [org.gradle.BuildExceptionReporter] at com.kpelykh.docker.client.DockerClient.build(DockerClient.java:693)
11:55:30.831 [ERROR] [org.gradle.BuildExceptionReporter] at com.kpelykh.docker.client.DockerClient$build.call(Unknown Source)
11:55:30.831 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.plugins.docker.tasks.image.DockerBuildImage.runRemoteCommand(DockerBuildImage.groovy:47)
11:55:30.831 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.plugins.docker.tasks.AbstractDockerTask$_start_closure1.doCall(AbstractDockerTask.groovy:44)
11:55:30.832 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.plugins.docker.tasks.AbstractDockerTask.withDockerJavaClassLoader(AbstractDockerTask.groovy:54)
11:55:30.832 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.plugins.docker.tasks.AbstractDockerTask.this$4$withDockerJavaClassLoader(AbstractDockerTask.groovy)
11:55:30.832 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.plugins.docker.tasks.AbstractDockerTask$this$4$withDockerJavaClassLoader.callCurrent(Unknown Source)
11:55:30.833 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.api.plugins.docker.tasks.AbstractDockerTask.start(AbstractDockerTask.groovy:43)
11:55:30.833 [ERROR] [org.gradle.BuildExceptionReporter] at org.gradle.util.JavaMethod.invoke(JavaMethod.java:62)
11:55:30.833 [ERROR] [org.gradle.BuildExceptionReporter] ... 56 more

Gradle docker plugin latency

Any idea why commands issued to the docker host (over https) have a much higher latency than the commands issued using the docker client (over tcp)? I put together a small POC to see how the plugin is performisg ->> docker-gradle-POC hoping to find out where that latency is coming from and this is as far I could get:

09:25:54.950 [DEBUG] [org.apache.http.impl.conn.PoolingHttpClientConnectionManager] Connection leased: [id: 0][route: {s}->https://192.168.59.103:2376][total kept alive: 0; route allocated: 1 of 2; total allocated: 1 of 20]
09:25:54.953 [DEBUG] [org.apache.http.impl.execchain.MainClientExec] Opening connection {s}->https://192.168.59.103:2376
09:25:54.955 [DEBUG] [org.apache.http.conn.HttpClientConnectionManager] Connecting to /192.168.59.103:2376
09:26:00.027 [DEBUG] [org.apache.http.impl.execchain.MainClientExec] Executing request POST /build?t=igenox/docker-poc&rm=true HTTP/1.1
09:26:00.027 [DEBUG] [org.apache.http.impl.execchain.MainClientExec] Target auth state: UNCHALLENGED
09:26:00.028 [DEBUG] [org.apache.http.impl.execchain.MainClientExec] Proxy auth state: UNCHALLENGED
09:26:00.029 [DEBUG] [org.apache.http.headers] http-outgoing-0 >> POST /build?t=igenox/docker-poc&rm=true HTTP/1.1
09:26:00.029 [DEBUG] [org.apache.http.headers] http-outgoing-0 >> Accept: text/plain
09:26:00.030 [DEBUG] [org.apache.http.headers] http-outgoing-0 >> Content-Type: application/tar
09:26:00.030 [DEBUG] [org.apache.http.headers] http-outgoing-0 >> User-Agent: Jersey/2.11 (Apache HttpClient 4.3.1)
09:26:00.030 [DEBUG] [org.apache.http.headers] http-outgoing-0 >> Transfer-Encoding: chunked
09:26:00.030 [DEBUG] [org.apache.http.headers] http-outgoing-0 >> Host: 192.168.59.103:2376
09:26:00.030 [DEBUG] [org.apache.http.headers] http-outgoing-0 >> Connection: Keep-Alive
09:26:00.031 [DEBUG] [org.apache.http.headers] http-outgoing-0 >> Accept-Encoding: gzip,deflate
09:26:16.001 [DEBUG] [org.apache.http.headers] http-outgoing-0 << HTTP/1.1 200 OK
09:26:16.002 [DEBUG] [org.apache.http.headers] http-outgoing-0 << Content-Type: application/json
09:26:16.002 [DEBUG] [org.apache.http.headers] http-outgoing-0 << Date: Tue, 05 May 2015 04:27:47 GMT
09:26:16.002 [DEBUG] [org.apache.http.headers] http-outgoing-0 << Transfer-Encoding: chunked
09:26:16.004 [DEBUG] [org.apache.http.impl.execchain.MainClientExec] Connection can be kept alive indefinitely
09:26:16.717 [DEBUG] [org.apache.http.impl.conn.PoolingHttpClientConnectionManager] Connection [id: 0][route: {s}->https://192.168.59.103:2376][state: O=Boot2Docker] can be kept alive indefinitely

As you can see, establishing the http connection takes 6s, completing the docker build takes another 16s. This is accountable for roughly 85% of the time spent in the whole build of a very basic java app.

Using the docker client, building the image from the same Dockerfile that the plugin created takes <1s after the docker layers have been cached, of course.

Could this be related to docker http server implementation and http message handling?

gradle-docker-plugin is not able to push into docker hub

I am not able to push to docker hub. The build says that it is successful, but it pushes only to the local docker repository not to docker.hub.

[[Avs-macfly:zinvoice-service vadim$ gradle -S pushImage
:createDockerfile UP-TO-DATE
:buildImage
Building image from folder '/Users/v/Development/zinvoice/zinvoice-service/build'.
Using tag 'zinvoice/zinvoice-service' for image.
Created image with ID 'e7aea64dcefe'.
:pushImage
Pushing image with name 'zinvoice/zinvoice-service'.

BUILD SUCCESSFUL

vs-macfly:zinvoice-service v$ docker images 
REPOSITORY                   TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
zinvoice/zinvoice-service    latest              70b032887dd5        5 seconds ago       160.2 MB

I was looking at https://github.com/docker-java/docker-java and there is a distinction between serverAddress and url.

url The Docker URL, e.g. https://localhost:2376.
serverAddress Your registry's address. (https://index.docker.io/v1/)

@bmuschko Does the plugin considers serverAddress?

createDockerfile if existing is always up to date

I am not sure if this is gradle-docker-plugin or a gradle thing.

When generating a Dockerfile gradle createDockerfile

task createDockerfile(type: Dockerfile) {
...

and later adding an additional entry to the task and call createDockerfile again without clean then it says that the docker file is :createDockerfile UP-TO-DATE

Pull from jcenter fails

Hi,

I tried to use the plugin as described, however that fails with the following error:

Error:Could not find com.bmuschko:gradle-docker-plugin:0.4.
Searched in the following locations:
    https://jcenter.bintray.com/com/bmuschko/gradle-docker-plugin/0.4/gradle-docker-plugin-0.4.pom
    https://jcenter.bintray.com/com/bmuschko/gradle-docker-plugin/0.4/gradle-docker-plugin-0.4.jar
Required by:
    Project:container:unspecified

It works if I build & push the plugin to the local maven repo... did probably something went wrong during the push to jcenter?

Thanks,
Fabian

No value has been specified for property 'classpath'.

i was able to create an image yesterday. Now if I am trying this again it fails with this stacktrace. I am confused about the error as my code did not change since yesterday.

task buildImage(type: DockerBuildImage) {
    dependsOn createDockerfile
    inputDir = createDockerfile.destFile.parentFile
    tag = "vad1mo/myservice"
}
:createDockerfile UP-TO-DATE
:buildImage FAILED

FAILURE: Build failed with an exception.

* What went wrong:
A problem was found with the configuration of task ':buildImage'.
> No value has been specified for property 'classpath'.

* Try:
Run with --info or --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskValidationException: A problem was found with the configuration of task ':buildImage'.
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:55)
    at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
    at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:305)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
    at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
    at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)
    at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)
    at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)
    at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)
    at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)
    at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)
    at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)
    at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
    at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)
    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:51)
    at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:171)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
    at org.gradle.launcher.Main.doAction(Main.java:33)
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
Caused by: org.gradle.api.InvalidUserDataException: No value has been specified for property 'classpath'.
    at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:47)
    ... 44 more


BUILD FAILED
``

IOException: Error writing to server

Hello,
I run boot2docker
vs-macfly:~ v$ boot2docker shellinit
Writing /Users/v/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/v/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/v/.boot2docker/certs/boot2docker-vm/key.pem
export DOCKER_HOST=tcp://192.168.59.103:2376
export DOCKER_CERT_PATH=/Users/v/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1

docker {
    serverUrl = 'http://192.168.59.103:2376' // output is: Error writing to server
    //serverUrl = 'http://192.168.59.103:2375' //  output is: connection refused
    // serverUrl = 'https://192.168.59.103:2376' //  java.lang.IllegalStateException: Already connected

    /* i am local
    credentials {
        username = 'bmuschko'
        password = 'pwd'
        email = '[email protected]'
    }
    */
}

now I tray to create an image but it fails, with this stacktrace

Caused by: javax.ws.rs.ProcessingException: java.io.IOException: Error writing to server
    at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:229)
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:246)
    at org.glassfish.jersey.client.JerseyInvocation$2.call(JerseyInvocation.java:683)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424)
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:679)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:435)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.post(JerseyInvocation.java:338)
    at com.github.dockerjava.jaxrs.BuildImageCmdExec.execute(BuildImageCmdExec.java:43)
    at com.github.dockerjava.jaxrs.BuildImageCmdExec.execute(BuildImageCmdExec.java:16)
    at com.github.dockerjava.jaxrs.AbstrDockerCmdExec.exec(AbstrDockerCmdExec.java:47)
    at com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:26)
    at com.github.dockerjava.api.command.DockerCmd$exec.call(Unknown Source)

I also tried different variations which a commented out with the displayed example.

I am running a current docker version (1.3), it this a limitation for the plugin?

Merge effort with transmode/gradle-docker?

Is there a good reason to have 2 gradle plugins to work with docker? Are there things your plugin provides / does better than the (seemingly) more active transmode/gradle-docker project?

java.io.IOException: This archives contains unclosed entries.

Hi guys, I'm getting the following when running

gradle clean --stacktrace buildExtractorImage

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':buildExtractorImage'.
Caused by: com.kpelykh.docker.client.DockerException: Error occurred while preparing Docker context folder.
Caused by: java.io.IOException: This archives contains unclosed entries.

Any ideas?

Docker build type plugin

Hi

First off, great work on the plugin. It has been a really useful and well designed.

While using the plugin I had found myself having a lot of duplication across different projects in the organization. To help with this I created another gradle plugin which wraps up some of the common workflows which your plugin can be used for.

I have made an attempt to add this to your plugin here: https://github.com/conormullen/gradle-docker-plugin

I was wondering if this is something you would have any interest in my finishing up (Adding tests etc), or would this not be something you would see as fitting well with the goals of your plugin?

javaApplication should provide a way to override user in Dockerfile (dockerDistTar)

Many published Docker images don't specify a user, so default to root. I don't really want to run my Java application as root, so I would like a way to override it. This is image dependent, but daemon seems appropriate in my case (Debian Wheezy).

What about adding a user property to the DockerJavaApplication convention?

Here's what I'm currently using as a workaround:

tasks[com.bmuschko.gradle.docker.DockerJavaApplicationPlugin.DOCKERFILE_TASK_NAME].doFirst {
    user 'daemon'
}

and I'm totally fine with that, but it took a bit of poking around to work it out.

Thank you very much for this plugin.

Problems with version 2.0.1 in IntelliJ

I recently updated docker plugin from version 0.7.2 to 2.0.1, now when I synchronize my gradle project in IntelliJ IDEA 14, I get the following error:

Error:(81, 0) Bad method call from inside of a branch
Exception Details:
Location:
com/bmuschko/gradle/docker/tasks/image/Dockerfile$FromInstruction.(Ljava/lang/String;)V @61: invokespecial
Reason:
Error exists in the bytecode
Bytecode:
0x0000000: b800 0f4d 04bd 0011 5903 2b53 5910 ff12
0x0000010: 04b8 0017 2a5f ab00 0000 0042 0000 0002
0x0000020: aad3 b1ff 0000 001a 64df 9bb1 0000 002d
0x0000030: 5f5a 5903 32b8 001d c000 1f5f 57b7 0021
0x0000040: a700 225f 5a59 0332 1223 b800 27c0 0023
0x0000050: 5f57 b700 2aa7 000d bb00 2c59 122e b700
0x0000060: 2fbf 57b1
Stackmap Table:
full_frame(@48,{UninitializedThis,Object[#31],Object[#53]},{Object[#55],UninitializedThis})
full_frame(@67,{UninitializedThis,Object[#31],Object[#53]},{Object[#55],UninitializedThis})
full_frame(@88,{UninitializedThis,Object[#31],Object[#53]},{Object[#55],UninitializedThis})
full_frame(@98,{Object[#2],Object[#31],Object[#53]},{Object[#55]})

Using gradle build from command line does work.

No value has been specified for property 'classpath'

I've looked at #17 but it is not clear to me why I am getting the same error.

To an existing multi-project build.gradle all I have added is:

to the buildscript dependency closure

classpath 'com.bmuschko:gradle-docker-plugin:2.0.2'  

imports

import com.bmuschko.gradle.docker.tasks.container.*
import com.bmuschko.gradle.docker.tasks.image.*

and the tasks you give as an example for executing functional tests against a running container

running gradle buildMyAppImage produces the error

I cannot see anything I have done which would indicate either of the points you mention, unless I have achieved one of them without trying!

This can only happen if you set the classpath property to null for at least one of your Docker tasks. It could potentially also happen if you assign an empty list of dependencies to the configuration dockerJava. There's really no good reason I can see why you'd want to change the built-in capabilities of the plugin.

Can't get dependencies if mavenCentral() is not in repositories

Not sure how to best correct this: if mavenCentral() is not under repositories, trying to run a task of type DockerCreateContainer fails with an error:

Could not resolve all dependencies for configuration ':dockerJava'.
Could not find com.kpelykh:docker-java:0.8.1.

Adding mavenCentral() to repositories fixes the error.

ExposedPort in createContainer does not work

Execution failed for task ':createMyAppContainer'.

java.lang.NoSuchMethodException: com.github.dockerjava.api.model.ExposedPort.(java.lang.String, java.lang.Integer)

Maybe, because this constructor is deprecated?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.