从docker发送ddtrace

问题描述 投票:1回答:1

我正在努力学习如何使用docker并遇到一些麻烦。我正在使用docker-compose.yaml文件运行连接到mysql容器的python脚本,我正在尝试使用ddtrace将跟踪发送到datadog。我正在使用this github page from 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

我不确定这个错误意味着什么。当我使用我的密钥并从本地运行而不是在docker镜像上运行时,它工作正常。这可能会出错?

python docker datadog
1个回答
1
投票

容器是关于隔离所以容器“localhost”意味着容器内部,所以ddtrace-test无法在容器内找到ddagent。你有2种方法来解决这个问题:

  1. network_mode: host放在ddtrace-test中,这样他就会绑定到主机的网络接口,跳过网络隔离
  2. 更改ddtrace-test以使用“ddagent”主机而不是localhost,因为可以使用他们的名称访问docker-compose服务
© www.soinside.com 2019 - 2024. All rights reserved.