1

我为我的开源代码创建了一些集成测试,我正在寻找一个可公开访问的 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)”我的问题是什么?

4

4 回答 4

2

@zefciu 这个配置对我有用

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
于 2015-09-22T22:10:31.340 回答
1

在支持人员的广泛帮助和一些反复试验下,我发现我的配置存在两个问题:

  1. CircleCI 上的默认 docker 版本与最新的 docker-compose 不兼容。
  2. 移除容器是不可能的,因此即使测试通过,--rm 标志也会导致构建变红。

因此,正确的配置将如下所示:

 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
于 2015-07-03T19:32:27.433 回答
0

您可以--net=host在运行容器时使用它来执行此操作,这将允许您通过localhost. 有了这个,你不需要使用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
于 2016-04-25T22:30:27.897 回答
0

更新:现在不需要了,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

您可以在 amazon S3 链接中替换1.8.2为您想要的版本

于 2015-10-13T06:15:20.283 回答