python - 从 docker 发送 ddtrace

标签 python docker datadog

我正在尝试学习如何使用 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

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

最佳答案

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

  1. network_mode: host 放在 ddtrace-test 中,这样他将绑定(bind)到主机的网络接口(interface),跳过网络隔离
  2. 将 ddtrace-test 更改为使用“ddagent”主机而不是本地主机,因为可以使用他们的名称访问 docker-compose 服务

关于python - 从 docker 发送 ddtrace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52390678/

相关文章:

javascript - 在发送到 Datadog 的 k6 指标中包含测试运行 ID

java - 无法自动检测kubelet URL : datadog_checks. base.errors.CheckException

python - 在 VSCode 中调试 Python 时显示完整的调用堆栈

python - 如何将这个迭代函数写成递归函数?

docker - 仅在需要时使用实例-GCP

docker - Kubernetes master at https ://localhost:6443. 无法登录

kubernetes - 为什么我的 DataDog 实例报告 Kubernetes "no_pod"?

python - Linux/bash/awk 读取部分文件名作为变量

python - 将一列的数据帧与具有一系列列的另一个数据帧匹配并提取列标题 - Python

docker - 如何为dockerized Rasa-NLU配置要公开的端口