从 docker 发送 ddtrace

The*_*ark 5 python docker datadog

我正在尝试学习如何使用 docker,但遇到了一些麻烦。我正在使用一个docker-compose.yaml文件来运行连接到 mysql 容器的 python 脚本,并且我正在尝试使用ddtrace它向 datadog 发送跟踪。我正在使用来自 datadog 的这个 github 页面中的以下图像

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"
Run Code Online (Sandbox Code Playgroud)

我的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"
Run Code Online (Sandbox Code Playgroud)

那么我正在运行命令docker-compose run --rm ddtrace-test python test.pytest.py看起来像

from ddtrace import tracer

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

foo()
Run Code Online (Sandbox Code Playgroud)

当我运行命令时,我返回

Starting service---reprocess_ddagent_1 ... done
foo
cannot send spans to localhost:8126: [Errno 99] Cannot assign requested address
Run Code Online (Sandbox Code Playgroud)

我不确定这个错误是什么意思。当我使用我的密钥并从本地运行而不是通过 docker 映像运行时,它工作正常。这里可能出了什么问题?

Jak*_*jny 3

容器是关于隔离的,因此在容器中“localhost”意味着容器内部,因此 ddtrace-test 在其容器内找不到 ddagent。您有两种方法可以解决这个问题:

  1. 放入network_mode: hostddtrace-test 以便他将绑定到主机的网络接口,跳过网络隔离
  2. 更改 ddtrace-test 以使用“ddagent”主机而不是 localhost,因为可以使用其名称访问 docker-compose 服务