Description
Summary
The following command does not work when run on Docker for Windows version 1.12
docker.exe inspect --format='{{(index (index .NetworkSettings.Ports "$port_number/tcp") 0).HostPort}}' $instance_name
It works on linux and OSX.
This affects Deployment Tasks.
Environment
- Windows 10
- Docker for Windows 1.12
- Docker Deployment Task added with Port Mapping set
Expected Results
Port settings returned.
Actual Results
The below exception is thrown in the Build log:
19-Oct-2016 09:02:53 Failing task since return code of [\path\to\docker.exe inspect --format='{{(index (index .NetworkSettings.Ports "$port_number/tcp") 0).HostPort}}' $instance_id] was 64 while expected 0 19-Oct-2016 09:02:53 Error occurred while running Task 'Run Docker Container(4)' of type com.atlassian.bamboo.plugins.bamboo-docker-plugin:task.docker.cli. 19-Oct-2016 09:02:53 com.atlassian.bamboo.task.TaskException: Failed to execute task 19-Oct-2016 09:02:53 at com.atlassian.bamboo.plugins.docker.service.RunService.execute(RunService.java:70) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.plugins.docker.tasks.cli.DockerCliTask.execute(DockerCliTask.java:60) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.task.TaskExecutorImpl.lambda$executeTasks$203(TaskExecutorImpl.java:317) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.task.TaskExecutorImpl.executeTaskWithPrePostActions(TaskExecutorImpl.java:246) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.task.TaskExecutorImpl.executeTasks(TaskExecutorImpl.java:317) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.task.TaskExecutorImpl.execute(TaskExecutorImpl.java:118) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.build.pipeline.tasks.ExecuteBuildTask.call(ExecuteBuildTask.java:74) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.v2.build.agent.DefaultBuildAgent.build(DefaultBuildAgent.java:215) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.v2.build.agent.BuildAgentControllerImpl$1.call(BuildAgentControllerImpl.java:139) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.v2.build.agent.BuildAgentControllerImpl$1.call(BuildAgentControllerImpl.java:130) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.variable.CustomVariableContextImpl.withVariableSubstitutor(CustomVariableContextImpl.java:221) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.v2.build.agent.BuildAgentControllerImpl.waitAndPerformBuild(BuildAgentControllerImpl.java:129) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.v2.build.agent.DefaultBuildAgent$1.run(DefaultBuildAgent.java:137) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.utils.BambooRunnables$1.run(BambooRunnables.java:51) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.security.ImpersonationHelper.runWith(ImpersonationHelper.java:31) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.security.ImpersonationHelper.runWithSystemAuthority(ImpersonationHelper.java:20) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.security.ImpersonationHelper$1.run(ImpersonationHelper.java:52) 19-Oct-2016 09:02:53 at java.lang.Thread.run(Unknown Source) 19-Oct-2016 09:02:53 Caused by: com.atlassian.bamboo.plugins.docker.client.DockerException: Error running Docker inspect command 19-Oct-2016 09:02:53 at com.atlassian.bamboo.plugins.docker.client.DockerCmd.getHostPort(DockerCmd.java:144) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.plugins.docker.service.RunService.getServiceUrl(RunService.java:143) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.plugins.docker.service.RunService.execute(RunService.java:63) 19-Oct-2016 09:02:53 ... 17 more 19-Oct-2016 09:02:53 Caused by: com.atlassian.utils.process.ProcessException: Error executing \path\to\docker.exe inspect --format='{{(index (index .NetworkSettings.Ports "$port_number/tcp") 0).HostPort}}' $instance_id 19-Oct-2016 09:02:53 at com.atlassian.bamboo.plugins.docker.process.DockerTaskProcessService.execute(DockerTaskProcessService.java:60) 19-Oct-2016 09:02:53 at com.atlassian.bamboo.plugins.docker.client.DockerCmd.getHostPort(DockerCmd.java:140) 19-Oct-2016 09:02:53 ... 19 more
Workaround
You can use a Script Task before the Docker Task, to wait for the port to open. This can be done with a PowerShell or CMD command like this or this. You will need to write out the Docker commands that you want to use.
External links
This issue was initially reported to Docker here: https://github.com/docker/toolbox/issues/433
But the recommended fix doesn't work in this case.
We opened this ticket to follow-up: https://github.com/docker/docker/issues/27592
Attachments
Issue Links
- Testing discovered
-
BAM-17964 Docker plugin should not query for host port when it is provided in configuration
- Closed