代码之家  ›  专栏  ›  技术社区  ›  mRcSchwering

circleci中docker executor的docker compose组网

  •  0
  • mRcSchwering  · 技术社区  · 6 年前

    我想这是一个循环问题。

    我对circleci很满意,但现在我遇到了一个问题,我不知道我做错了什么。 也许这件事很简单,但我看不到它的重要性。

    简言之

    我不能让集装箱在circleci上互相交谈。

    问题

    基本上我想做的是 服务器 容器和a 客户 容器,然后让他们互相交谈。 我在这里创建了一个简单的示例: https://github.com/mRcSchwering/circleci-integration-test

    这个 README.md 基本上解释了期望的结果。 我有一个 .circleci/config.yml 像这样:

    version: 2
    jobs:
      build:
        docker:
          - image: docker:18.03.0-ce-git
        steps:
          - checkout
          - setup_remote_docker
          - run:
              name: Install docker-compose
              command: |
                apk --update add py2-pip
                /usr/bin/pip2 install docker-compose
                docker-compose --version
          - run:
              name: Start Container
              command: |
                docker-compose up -d
                docker-compose ps
          - run:
              name: Let client talk to server
              command: |
                docker-compose run client psql -h server -p 5432 -U postgres -c "\l"
    

    在docker容器中, docker-compose ,然后用于启动 server 和a client (此处为博士后)。在最后一步中,我告诉 客户 要查询 服务器 。但是,它无法找到 服务器 :

    #!/bin/sh -eo pipefail
    docker-compose run client psql -h server -p 5432 -U postgres -c "\l"
    Starting project_server_1 ... 
    
    ^@^@psql: could not connect to server: Connection refused
        Is the server running on host "server" (172.18.0.2) and accepting
        TCP/IP connections on port 5432?
    Exited with code 2
    

    文件

    这个 docker-compose.yml 看起来像这样

    version: '2'
    
    services:
      server:
        image: postgres:9.5.12-alpine
        networks:
          - internal
        expose:
          - '5432'
      client:
        build:
          context: .
        networks:
          - internal
        depends_on:
            - server
    
    networks:
      internal:
        driver: bridge
    

    其中 客户 是从这样的dockerfile构建的

    FROM alpine:3.7
    RUN apk --no-cache add postgresql-client && rm -rf /var/cache/apk/*
    

    笔记

    如果我在Linux上重复所有操作(docker中也有docker),它就会工作。 但我想有些事情在circleci上的效果完全不同。 我发现有人提到在circleci上联网和绑定挂载可能很棘手,但我没有找到任何可以帮助我的东西。 有这个 doc 但我想我已经在做了。 然后就有了 this project 似乎有人在circleci上成功地做了同样的事情。 但我不知道那里有什么不同。。。

    无论如何,我非常感谢你的帮助。到目前为止,我已经放弃了这一点。

    最好的 马克

    1 回复  |  直到 6 年前
        1
  •  0
  •   mRcSchwering    6 年前

    好的,同时我(不,实际上是 半身人 circleci论坛)注意到 docker-compose run client psql -h server -p 5432 -U postgres -c "\l" 在服务器启动和运行之前运行。一个简单的 sleep 5 之后 docker-compose up -d 修复了问题。