【问题标题】:Running docker-container tests on circleCI在 circleCI 上运行 docker-container 测试
【发布时间】:2015-07-03 19:32:27
【问题描述】:

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

【问题讨论】:

    标签: docker continuous-integration integration-testing docker-compose circleci


    【解决方案1】:

    @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
    

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

      • 这仍然对您有用吗?当我运行它时,docker 的 curl 安装失败。
      • 它不再起作用了。我目前正在尝试纠正此问题。
      【解决方案3】:

      更新:不再需要了,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.2 替换为您想要的版本

      【讨论】:

        【解决方案4】:

        您可以在运行容器时使用--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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-22
          • 1970-01-01
          • 1970-01-01
          • 2017-10-02
          相关资源
          最近更新 更多