Transmode / gradle-docker

A Gradle plugin to build Docker images from the build script.
Apache License 2.0
647 stars 142 forks source link

Running on Windows #62

Open whgibbo opened 9 years ago

whgibbo commented 9 years ago

Hi, Firstly I new to using docker and have recently installed docker machine and have docker running.

I've taken a sample gradle project from https://spring.io/guides/gs/spring-boot-docker/ and I'm trying to get it to work on windows.

So I tried using the dockerBinary, but that didn't seem to work. So thought that I would try the following

useApi true hostUrl 'http://192.168.99.100:2376' apiUsername 'user' apiPassword 'password'

But when I build I get the following:

:buildDocker FAILED FAILURE: Build failed with an exception.

  • What went wrong: Execution failed for task ':buildDocker'. java.io.IOException: Stream Closed
  • Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. BUILD FAILED

So tried it with a stack trace and got the following:

  • Exception is: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':buildDocker'. 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:52) 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.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:62) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110) at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37) at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23) at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43) at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30) at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:158) at org.gradle.internal.Factories$1.create(Factories.java:22) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52) at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:155) at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:36) at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:103) at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:97) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62) at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:97) at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86) at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:102) at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28) at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:47) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:32) at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:77) at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:47) at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51) at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28) at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43) at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:170) 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: com.sun.jersey.api.client.ClientHandlerException: java.io.IOException: Stream Closed at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:184) at com.github.dockerjava.client.utils.JsonClientFilter.handle(JsonClientFilter.java:17) at com.sun.jersey.api.client.filter.LoggingFilter.handle(LoggingFilter.java:217) at com.sun.jersey.api.client.Client.handle(Client.java:652) at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570) at com.github.dockerjava.client.command.BuildImgCmd.callDocker(BuildImgCmd.java:94) at com.github.dockerjava.client.command.BuildImgCmd.impl(BuildImgCmd.java:72) at com.github.dockerjava.client.command.BuildImgCmd.impl(BuildImgCmd.java:35) at com.github.dockerjava.client.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:21) at se.transmode.gradle.plugins.docker.client.JavaDockerClient.buildImage(JavaDockerClient.java:43) at se.transmode.gradle.plugins.docker.client.DockerClient$buildImage.call(Unknown Source) at se.transmode.gradle.plugins.docker.DockerTask.build(DockerTask.groovy:244) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:226) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:219) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:208) 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) ... 57 more Caused by: java.io.IOException: Stream Closed at com.sun.jersey.core.util.ReaderWriter.writeTo(ReaderWriter.java:114) at com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeTo(AbstractMessageReaderWriterProvider.java:76) at com.sun.jersey.core.impl.provider.entity.InputStreamProvider.writeTo(InputStreamProvider.java:98) at com.sun.jersey.core.impl.provider.entity.InputStreamProvider.writeTo(InputStreamProvider.java:59) at com.sun.jersey.api.client.RequestWriter$RequestEntityWriterImpl.writeRequestEntity(RequestWriter.java:231) at com.sun.jersey.client.apache4.ApacheHttpClient4Handler$2.writeTo(ApacheHttpClient4Handler.java:262) at org.apache.http.entity.BufferedHttpEntity.writeTo(BufferedHttpEntity.java:115) at org.apache.http.entity.HttpEntityWrapper.writeTo(HttpEntityWrapper.java:98) at org.apache.http.impl.client.EntityEnclosingRequestWrapper$EntityWrapper.writeTo(EntityEnclosingRequestWrapper.java:108) at org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:122) at org.apache.http.impl.AbstractHttpClientConnection.sendRequestEntity(AbstractHttpClientConnection.java:271) at org.apache.http.impl.conn.ManagedClientConnectionImpl.sendRequestEntity(ManagedClientConnectionImpl.java:197) at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:257) at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) at org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:715) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:520) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:827) at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:170) ... 78 more

Any thoughts or suggestions ?

fwaibel commented 9 years ago

Same over here with Docker daemon 1.8:

docker --version Docker version 1.8.0, build 0d03096

whgibbo commented 9 years ago

Hi, Managed to get it sort of working using

docker { dockerBinary = "c:\Program Files\Docker Toolbox\docker.exe" useApi false }

This now builds the image :) But is failing to push the image, which is ok for the time being as I don't really want to push it..

But any thoughts ?

Thanks

pmihalcin commented 8 years ago

Hi, I tried the same thing on Windows and it is still not able to build a docker image. Plugin tries to post to tcp 127.0.0.1:2375 using docker remote api, even though I specified useApi false.

My docker config in build.gradle:

docker {
    dockerBinary = 'c:/Program Files/Docker Toolbox/docker.exe'
    useApi false
}

Any suggestions?

yugesha commented 8 years ago

Try running the command docker-machine env before running gradle

talk2vino commented 8 years ago

Same here too i tried with and without useapi. Its not working

If i using useapi as true. I am getting

:buildDocker FAILED FAILURE: Build failed with an exception.

What went wrong: Execution failed for task ':buildDocker'. java.io.IOException: Stream Closed

If i use api false

It tries to connect 127.0.0.1:2375 and failing

C: docker.exe --version Docker version 1.10.2, build c3959b1 C:docker-machine.exe --version docker-machine.exe version 0.6.0, build e27fb87 PS C: docker-machine.exe env vino $Env:DOCKER_TLS_VERIFY = "1" $Env:DOCKER_HOST = "tcp://192.168.99.101:2376" $Env:DOCKER_CERT_PATH = "C:\Users\VNARASIMHAN.docker\machine\machines\vino" $Env:DOCKER_MACHINE_NAME = "vino"

skarthiksankaran commented 8 years ago

Try doing this, export DOCKER_HOST="tcp://xxxx:2376"

Where xxxx is the IPaddress of the docker vm.

and then do

./gradlew build buildDocker

bjornmagnusson commented 8 years ago

Try using docker-machine.exe env vino | Invoke-Expression (powershell), before building with gradle. This set all the necessary env variables in your PS shell. Before running gradle task you should be able to run "docker ps" and see all containers running in your docker host

ruchikagarg23 commented 7 years ago

Hi,

When I executed "gradle distDocker",I got below error

Execution failed for task ':distDocker'.

org.apache.http.conn.HttpHostConnectException: Connection to http://xxx:2375 refused

I have added below line in my build.gradle:

distDocker { exposePort 8080 setEnvironment 'JAVA_OPTS', '-Dspring.profiles.active=docker' }

docker { useApi true hostUrl 'http://xxx:2375' baseImage = 'java:7' } I have Docker toolbox installed for windows

Please provide suggestion to solve this error.

dmonti commented 6 years ago

Same problem here, using curl I get this:

$ curl http://10.0.0.61:4243/version
{"Version":"17.09.0-ce","ApiVersion":"1.32","MinAPIVersion":"1.12","GitCommit":"afdb6d4","GoVersion":"go1.8.3","Os":"linux","Arch":"amd64","KernelVersion":"3.10.0-514.el7.x86_64","BuildTime":"2017-09-26T22:42:49.000000000+00:00"}

from gradle buildDocker:

Caused by: com.sun.jersey.api.client.ClientHandlerException: java.io.IOException: Stream Closed at com.sun.jersey.client.apache4.ApacheHttpClient4Handler.handle(ApacheHttpClient4Handler.java:184) at com.github.dockerjava.client.utils.JsonClientFilter.handle(JsonClientFilter.java:17) at com.sun.jersey.api.client.filter.LoggingFilter.handle(LoggingFilter.java:217) at com.sun.jersey.api.client.Client.handle(Client.java:652) at com.sun.jersey.api.client.WebResource.handle(WebResource.java:682) at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74) at com.sun.jersey.api.client.WebResource$Builder.post(WebResource.java:570) at com.github.dockerjava.client.command.BuildImgCmd.callDocker(BuildImgCmd.java:94)

My build conifg:

docker {
    useApi true
    hostUrl 'http://10.0.0.61:4243/'
}
SpaceBison commented 6 years ago

I got the same problem. Plugin config:

docker {
    useApi true
    hostUrl 'http://x.x.x.x:2376'
}

Remote host:

$ curl http://x.x.x.x:2376/version
{"Platform":{"Name":""},"Components":[{"Name":"Engine","Version":"17.12.1-ce","Details":{"ApiVersion":"1.35","Arch":"amd64","BuildTime":"2018-02-27T22:16:13.000000000+00:00","Experimental":"false","GitCommit":"7390fc6","GoVersion":"go1.9.4","KernelVersion":"4.4.0-116-generic","MinAPIVersion":"1.12","Os":"linux"}}],"Version":"17.12.1-ce","ApiVersion":"1.35","MinAPIVersion":"1.12","GitCommit":"7390fc6","GoVersion":"go1.9.4","Os":"linux","Arch":"amd64","KernelVersion":"4.4.0-116-generic","BuildTime":"2018-02-27T22:16:13.000000000+00:00"}

Edit: Having taken a closer look at the stacktrace, I think that the problem might be with with the docker-java dependency. The plugin uses version 2.2.0, which is over 2 years old now, whereas the current version is 3.0.14. I guess there's no easy fix for this for now.