【问题标题】:Networking using docker-compose in docker executor in circleci在 circleci 的 docker executor 中使用 docker-compose 进行网络连接
【发布时间】:2018-04-26 20:51:17
【问题描述】:

我猜这是一个circleci问题。

我对 circleci 很满意,但现在我遇到了一个问题,我不知道我做错了什么。 也许这很容易,但我没有看到它。

总之

我无法让容器在 circleci 上相互通信。

问题

基本上我想做的是启动一个 server 容器和一个 client 容器,然后让它们相互通信。 我在这里创建了一个最小的示例: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,然后用于启动serverclient(此处为postgres)。在最后一步中,我告诉client 查询server。但是,它找不到server

#!/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

client 是从这样的 dockerfile 构建的

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

注意

如果我在我的 Linux 上重复所有操作(也使用 docker-in-docker),它就可以工作。 但我猜有些事情在circleci上的工作方式完全不同。 我发现有些人提到在 circleci 网络和绑定挂载上可能很棘手,但我没有找到任何可以帮助我的东西。 有这个doc,但我以为我已经这样做了。 然后是this project,有人似乎在circleci 上成功地做了同样的事情。 但我无法弄清楚那里有什么不同......

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

最好的 马克

【问题讨论】:

    标签: docker-compose circleci docker-networking circleci-2.0 docker-in-docker


    【解决方案1】:

    好的,与此同时,我(实际上不是来自 circleci 论坛的 halfer)注意到 docker-compose run client psql -h server -p 5432 -U postgres -c "\l" 在服务器启动并运行之前运行。在docker-compose up -d 之后的一个简单的sleep 5 可以解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-14
      • 2019-10-30
      相关资源
      最近更新 更多