我正在尝试学习如何使用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映像运行时,它可以正常工作。这里可能出什么问题了?
答案 0 :(得分:1)
容器是关于隔离的,因此在容器“ localhost”中表示在容器内,因此ddtrace-test无法在其容器内找到ddagent。您有2种解决方法:
network_mode: host
放在ddtrace-test中,以便他将绑定到主机的网络接口,从而跳过网络隔离