Работа в сети с использованием docker-compose в docker executor в circleci - PullRequest
0 голосов
/ 26 апреля 2018

это вопрос о круге, я думаю.

Я очень доволен кружком, но теперь у меня возникла проблема, и я не знаю, что я делаю неправильно. Может быть, это очень просто, но я этого не вижу.

Короче

Я не могу заставить контейнеры разговаривать друг с другом по кружочкам.

Проблема

В основном я хотел запустить сервер контейнер и клиент контейнер, а затем позволить им общаться друг с другом. Я создал минимальный пример здесь: 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 и client (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 построен из файла Docker, подобного этому

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

Примечание

Если я повторяю все в моем Linux (также с docker-in-docker), это работает. Но я думаю, что некоторые вещи работают совершенно по-другому на круговоротах. Я обнаружил, что некоторые люди упоминают, что в сети CircleCi и bind-маунтах может быть сложно, но я не нашел ничего, что могло бы мне помочь. Есть этот документ , но я думал, что уже делаю это. Тогда есть этот проект , где кто-то, кажется, делает то же самое с кружочками успешно. Но я не могу понять, что там отличается ...

В любом случае, я был бы очень признателен за вашу помощь. Пока я отказался от этого.

Лучший Марк

1 Ответ

0 голосов
/ 29 апреля 2018

Хорошо, тем временем я (нет, на самом деле это был halfer с форума circleci) заметил, что docker-compose run client psql -h server -p 5432 -U postgres -c "\l" был запущен до того, как сервер был запущен и работает. Простое sleep 5 после docker-compose up -d устраняет проблему.

...