Отправка ddtrace из докера - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь узнать, как использовать докер, и у меня возникли некоторые проблемы.Я использую файл docker-compose.yaml для запуска скрипта Python, который подключается к контейнеру MySQL, и я пытаюсь использовать ddtrace для отправки трасс в Datadog.Я использую следующее изображение из этой страницы github из datadog

ddagent:
      image: datadog/docker-dd-agent
      environment:
          - DD_BIND_HOST=0.0.0.0
          - DD_API_KEY=invalid_key_but_this_is_fine
      ports:
          - "127.0.0.1:8126:8126"

И мой docker-compose.yaml выглядит как

version: "3"
services:
    ddtrace-test:
        build: .
        volumes:
          - ".:/app"
        links:
          - ddagent

    ddagent:
          image: datadog/docker-dd-agent
          environment:
              - DD_BIND_HOST=0.0.0.0
              - DD_API_KEY=<my key>
          ports:
              - "127.0.0.1:8126:8126"

Итак, я бегукоманда docker-compose run --rm ddtrace-test python test.py, где test.py выглядит как

from ddtrace import tracer

@tracer.wrap('test', 'test')
def foo():
    print('running foo')

foo()

И когда я запускаю команду, мне возвращается с

Starting service---reprocess_ddagent_1 ... done
foo
cannot send spans to localhost:8126: [Errno 99] Cannot assign requested address

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

1 Ответ

0 голосов
/ 18 сентября 2018

Контейнеры предназначены для изоляции, поэтому в контейнере «localhost» означает, что внутри контейнера ddtrace-test не может найти ddagent внутри его контейнера.У вас есть два способа исправить это:

  1. Поместите network_mode: host в ddtrace-test, чтобы он связывался с сетевым интерфейсом хоста, пропуская изоляцию сети
  2. Измените ddtrace-test на использование "ddagent "host вместо localhost, как в сервисах docker-compose, можно получить по их именам
...