CircleCI script uses too recent Docker client

docker

#1

A friend of mine uses Ubuntu 17.04, which comes with Docker version 1.12.6, build 78d1802. Trying to run circleci build results in Error response from daemon: client is newer than server (client API version: 1.30, server API version: 1.24).

My assumption is that the Picard image contains a Docker client which is too new for this host. However, the documentation on running jobs locally does not mention a version requirement and the circleci script does not complain about the version of the Docker daemon, either.

It would be nice if the Docker client used by the circleci script could be downgraded to a more compatible version, or if the documentation would mention version requirements and the circleci script would check them, before beginning the build.

See-Also: https://github.com/circleci/circleci-docs/issues/1071


#2

This build I ran shows the latest version of docker and docker-compose versions installed on our virtual machine and remote Docker environment:

https://circleci.com/gh/ryanwohara/test-2.0/292

We update it periodically but that’s the only restriction. Hard coding the current versions into the circleci CLI tool doesn’t seem like a prudent use of developer resources.

Can you clarify what Picard image you are referring to here?


#3

The circleci script refers to it as circleci/picard. I assumed, since circleci mounts /var/run/docker.sock into that image, that you probably have a Docker client built into /usr/bin/circleci within that image, which you use to create additional containers.


#4

Getting same issue here

Starting container ubuntu:16.04
Error: error starting container ubuntu:16.04: Error response from daemon: client is newer than server (client API version: 1.30, server API version: 1.24)


#5

You just need to downgrade your Docker version to match to the server.
Can you link me to that build?


#6

FWIW I’m running with an older image tag, 19b0fdc579d2 in particular.

ex:

circleci -t 19b0fdc579d2 build

#7

I can confirm this is also biting us. We run ubuntu 16.04 locally, and the latest version of circleci/picard (81486c507ba3) no longer works due to the mismatch of docker client inside picard, and the docker server that comes with ubuntu. Older versions of circleci/picard did not have this problem (e.g. 19b0fdc579d2). From the versions of picard i have locally cached:

Bad:

  • ae3da6cf677c
  • 81486c507ba3
  • 51c3b5e54363
    Good:
  • 19b0fdc579d2

Here’s the full output of docker version:

$ docker version
Client:
 Version:      1.12.6
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   78d1802
 Built:        Tue Jan 31 23:35:14 2017
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.6
 API version:  1.24
 Go version:   go1.6.2
 Git commit:   78d1802
 Built:        Tue Jan 31 23:35:14 2017
 OS/Arch:      linux/amd64

#8

Do our docs say to use circleci/picard somewhere?


#9

Dear @rohara, I did not check, but I believe your docs do not mention circleci/picard anywhere, nor do they advise to use that image. It was a mistake to mention that image in this thread in the first place – hence I corrected this thread’s topic now.

Instead I should simply have given you a straightforward description of the issue at hand, without any guesswork, and then allowed you to investigate the actual underlying problem yourself: I suggested to a friend of mine to use CircleCI, instead of a competing product, to run the build and tests of his current project, specifically pointing him at the feature of “local jobs” that you offer through the circleci script. Sadly, when running circleci build, he received the message that his Docker daemon was implementing an old API. Since the Docker client he has installed on his machine matches the Docker daemon he has installed, I assumed that somehow circleci build fetches a different Docker client from somewhere, which is then too recent. Me investigating further into what the circleci script does led to this thread with all the mess and misunderstandings. Neither me nor him never “used” circleci/picard at all – I just investigated that image’s contents to figure out where that mysterious Docker client was coming from.


#10

@rohara: It’s not that the docs mention circleci/picard, it’s that picard is used by the circleci script, and picard changed recently such that it no longer works on hosts with older docker versions.


#12

this image (19b0fdc579d2 ) is no longer served up.


#13

hearing from @rohara or another circle employee for why api > API version: 1.23 is used would be interesting.

API version: 1.23 is what is used in kubernetes, minikube, and GKE.

Is there a reasonable middle-ground of allowing users to alter the minimum server api version perhaps at the loss of some feature?


#14

A small amount of reversing of the circleci script+binary enabled me to write this patch that allows use with earlier docker versions:


#15

Running circleci update should resolve this issue now


#16

This topic was automatically closed 41 days after the last reply. New replies are no longer allowed.