#docker-compose #zipkin
#docker-compose #zipkin
Вопрос:
У меня есть вопрос для начинающих с Docker Compose. Я пытаюсь расширить docker-compose-slim.yml
файл примера из репозитория Zipkin GitHub.
Мне нужно изменить его, чтобы он мог включать простое приложение FastAPI, которое я написал. К сожалению, я не могу заставить их соединяться друг с другом. FastAPI отклоняется при попытке отправить POST-запрос в контейнер Zipkin, даже если они оба подключены к одной сети с явными ссылками и сопоставлением портов, определенными в файле YAML. Однако я могу подключиться к ним обоим с хоста.
Не могли бы вы сказать мне, что я сделал не так?
Вот сообщение об ошибке:
Error emitting zipkin trace. ConnectionError(MaxRetryError("HTTPConnectionPool(host='127.0.0.1', port=9411): Max retries exceeded with url: /api/v2/spans (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fce354711c0>: Failed to es
tablish a new connection: [Errno 111] **Connection refused**'))"))
Вот файл Docker Compose YAML:
version: '2.4'
services:
zipkin:
image: openzipkin/zipkin-slim
container_name: zipkin
environment:
- STORAGE_TYPE=mem
ports:
# Port used for the Zipkin UI and HTTP Api
- 9411:9411
depends_on:
- storage
storage:
image: busybox:1.31.0
container_name: fake_storage
myfastapi:
build: .
ports:
- 8000:8000
links:
- zipkin
depends_on:
- zipkin
dependencies:
image: busybox:1.31.0
container_name: fake_dependencies
networks:
default:
name: foo_network
Вот файл Dockerfile:
FROM python:3.8.5
ADD . /app
WORKDIR /app
RUN pip install -r requirements.txt
EXPOSE 8000
CMD ["uvicorn", "wsgi:app", "--host", "0.0.0.0", "--port", "8000"]
Комментарии:
1. Я бы рекомендовал вам объединить три контейнера в сеть.
2. Привет, спасибо за ваш ответ. Я думал, что я сделал с этими инструкциями в yml «сети: по умолчанию: имя: foo_network». Я неправильно понимаю, как это работает?
3. Я пишу ответ, пожалуйста, протестируйте его.
Ответ №1:
Вы должны указать контейнерам сеть «foo_network». Внешний флаг указывает, что контейнеры недоступны извне. Конечно, вам не нужно делать ставки, но я подумал, что в качестве примера это может быть неплохо.
И из-за функции «ссылки» посмотрите здесь ссылку
version: '2.4'
services:
zipkin:
image: openzipkin/zipkin-slim
container_name: zipkin
environment:
- STORAGE_TYPE=mem
ports:
# Port used for the Zipkin UI and HTTP Api
- 9411:9411
depends_on:
- storage
networks:
- foo_network
storage:
image: busybox:1.31.0
container_name: fake_storage
networks:
- foo_network
myfastapi:
build: .
ports:
- 8000:8000
links:
- zipkin
depends_on:
- zipkin
networks:
- foo_network
dependencies:
image: busybox:1.31.0
container_name: fake_dependencies
networks:
- foo_network
networks:
foo_network:
external: false
Комментарии:
1. Привет, спасибо за решение. К сожалению, у меня все еще та же проблема. Ошибка, вызывающая трассировку zipkin. Ошибка подключения (MaxRetryError(«HTTPConnectionPool(host=’127.0.0.1′, port= 9411): превышено максимальное количество попыток с url: /api/v2/spans (вызвано NewConnectionError(‘ Объект HttpConnection в 0x7f8c5ae3c460>: Не удалось установить новое соединение: [Ошибка 111] Соединение отклонено ‘))»))
2. Это мой zipkin_sender, единственная логика, которая отправляется в zipkin def simple_http_zipkin_sender(encoded_span): «»»Простой HTTP-отправитель для zipkin»»» body = encoded_span res = requests.post( » 127.0.0.1:9411/api / v2 /spans «, data=body, headers={‘Content-Введите’: ‘application /json’} ) возвращает res
3. Вы также можете попробовать «zipkin: 9411 / api / v2 / spans», то есть я имею в виду, что вы можете обращаться к контейнерам в вашей сети Docker по имени контейнера.
4. Что происходит при вводе
curl -s zipkin:9411/api/v2/spans
?5. Я нашел решение! Да, это работает, как только я переименовал контейнер в zipkin1 и нажимаю на zipkin1 вместо zipkin или локального хоста!