在circleCI上运行docker-containertesting

我为我的开源代码创build了一些集成testing,我正在寻找一个可公开访问的CI服务来承载它们。 由于Travis-CI对我所有的容器都有小配额,我想我会用CircleCI。 这是我的cirle.yml

 machine: services: - docker dependencies: override: - pip install docker-compose test: override: - cd integration-tests && docker-compose run --rm runner 

然而,运行后,我得到错误消息“客户端和服务器没有相同的版本(客户端:1.18,服务器:1.16)”我的问题是什么?

@zefciu这个configuration只是为我工作

 machine: services: - docker dependencies: override: - sudo pip install -U docker-compose==1.3.3 test: override: - docker-compose -f <compose-file> build && docker-compose -f <compose-file> up 

有了支持和一些试验和错误广泛的帮助,我发现我的configuration有两个问题:

  1. CircleCI上的默认泊坞窗版本与最新的docker-compose不兼容。
  2. 去除容器是不可能的,因此即使testing通过,-rm标志也会使构build变红。

因此正确的configuration将如下所示:

  machine: services: - docker pre: - sudo curl -sSL https://get.docker.com/ | sh dependencies: override: - pip install docker-compose test: override: - cd integration-tests && docker-compose run runner 

更新 :它不再需要了,CircleCI现在默认有Docker v1.8.2

你可以像这样更新docker版本:

 machine: services: - docker pre: - docker --version - sudo curl -L -o /usr/bin/docker 'http://s3-external-1.amazonaws.com/circle-downloads/docker-1.8.2-circleci' - sudo chmod 0755 /usr/bin/docker - docker --version 

您可以将亚马逊S3链接中的1.8.2replace为所需的版本

您可以在运行容器时使用--net=host来执行此操作,这将允许您通过localhost访问Circle CI服务。 有了这个你不需要使用docker-compose 。 Circle CI为您提供大部分服务。

 machine: services: - docker - mysql - redis ... test: override: - | docker run \ --net=host \ --env MYSQL_HOST=localhost \ --env MYSQL_PORT=3306 \ --env MYSQL_DATABASE=circle_test \ --env MYSQL_USERNAME=ubuntu \ --env REDIS_HOST=localhost \ --env REDIS_PORT=$REDIS_PORT \ my/container runner