在circleCI上运行docker容器测试

在circleCI上运行docker容器测试,docker,continuous-integration,integration-testing,docker-compose,circleci,Docker,Continuous Integration,Integration Testing,Docker Compose,Circleci,我已经为我的开源代码创建了一些集成测试,我正在寻找一个可公开访问的CI服务来承载它们。由于Travis CI对我所有的容器都有很小的配额,我想我会使用CircleCI。这是我的cirle.yml: machine: services: - docker dependencies: override: - pip install docker-compose test: override: - cd integration-t

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

在广泛的支持帮助和一些尝试和错误后,我发现我的配置有两个问题:

  • CircleCI上的默认docker版本与最新docker compose不兼容
  • 移除容器是不可能的,因此--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
    
    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
    

    @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
    
    机器:
    服务:
    -码头工人
    依赖项:
    覆盖:
    -sudo pip安装-U docker compose==1.3.3
    测试:
    覆盖:
    -docker compose-f构建和docker compose-f构建
    
    更新:不再需要它了,CircleCI现在默认使用Docker v1.8.2

    您可以按如下方式更新docker版本:

     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
    
    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
    替换为您想要的版本

    您可以使用
    --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
    

    这对你有用吗?docker的curl安装在我运行时失败。它不再工作。我目前正试图纠正这一点。