Работа в сети с использованием docker-compose в docker executor в circleci
Это вопрос круговорота, я думаю.
Я очень доволен кругом, но теперь у меня возникла проблема, и я не знаю, что я делаю неправильно. Может быть, это очень просто, но я этого не вижу.
Короче
Я не могу заставить контейнеры разговаривать друг с другом по кольцу.
проблема
По сути, я хотел запустить контейнер сервера и клиентский контейнер, а затем позволить им общаться друг с другом. Я создал минимальный пример здесь: 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-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
построен из Dockerfile, как это
FROM alpine:3.7
RUN apk --no-cache add postgresql-client && rm -rf /var/cache/apk/*
Заметка
Если я повторяю все в моем Linux (также с docker-in-docker), это работает. Но я думаю, что некоторые вещи работают совершенно по-другому на круговоротах. Я обнаружил, что некоторые люди упоминают, что с сеткой кругов и связыванием может быть сложно, но я не нашел ничего, что могло бы мне помочь. Есть этот документ, но я думал, что уже делаю это. Тогда есть этот проект, где кто-то, кажется, делает то же самое на Circleci успешно. Но я не могу понять, что там отличается...
В любом случае, я был бы очень признателен за вашу помощь. Пока что я отказался от этого.
Лучший Марк
1 ответ
Хорошо, в то же время я (нет, на самом деле это был недоумок с форума Circleci) заметил, что docker-compose run client psql -h server -p 5432 -U postgres -c "\l"
был запущен до того, как сервер был запущен и работает. Просто sleep 5
после docker-compose up -d
устраняет проблему