从 docker 发送 ddtrace
Sending ddtrace from docker
我正在努力学习如何使用 docker,但遇到了一些麻烦。我正在使用 docker-compose.yaml
文件 运行 连接到 mysql 容器的 python 脚本,我正在尝试使用 ddtrace
发送跟踪到数据狗。我正在使用 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 图像上使用我的密钥和 运行 时,它工作正常。这里可能出了什么问题?
容器是关于隔离的,所以在容器中 "localhost" 意味着在容器内部,所以 ddtrace-test 无法在他的容器中找到 ddagent。你有两种方法来解决这个问题:
- 将
network_mode: host
放入 ddtrace-test 中,这样他将绑定到主机的网络接口,跳过网络隔离
- 更改 ddtrace-test 以使用 "ddagent" 主机而不是 docker 中的本地主机 - 可以使用他们的名称访问撰写服务
我正在努力学习如何使用 docker,但遇到了一些麻烦。我正在使用 docker-compose.yaml
文件 运行 连接到 mysql 容器的 python 脚本,我正在尝试使用 ddtrace
发送跟踪到数据狗。我正在使用 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 图像上使用我的密钥和 运行 时,它工作正常。这里可能出了什么问题?
容器是关于隔离的,所以在容器中 "localhost" 意味着在容器内部,所以 ddtrace-test 无法在他的容器中找到 ddagent。你有两种方法来解决这个问题:
- 将
network_mode: host
放入 ddtrace-test 中,这样他将绑定到主机的网络接口,跳过网络隔离 - 更改 ddtrace-test 以使用 "ddagent" 主机而不是 docker 中的本地主机 - 可以使用他们的名称访问撰写服务