错误:ddtrace.internal.writer:无法将跟踪发送到位于http://localhost:8126的Datadog代理:OSError:[Errno 99]无法分配请求的地址

Pra*_*eek 5 python docker datadog

我想设置 datadog 代理来监视在 docker 容器内运行的 python 应用程序。我创建了标记为 datadog_app:v_1 的 docker 映像。下面是我的 docker 文件:

FROM ubuntu:18.04
WORKDIR /app
RUN apt-get update --no-install-recommends
RUN apt-get install -y build-essential python3.6 python3.6-dev python3-pip python3-setuptools --no-install-recommends
RUN pip3 install Cython
RUN pip3 install ddtrace
RUN apt-get install -y curl
ADD ./datadog_app.py /app/handler.py
RUN DD_AGENT_MAJOR_VERSION=7 DD_API_KEY=my_api_key DD_SITE="datadoghq.com" bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script.sh)"
CMD ddtrace-run python3 handler.py
Run Code Online (Sandbox Code Playgroud)

以下是 datadog_app.py 文件的代码:

from ddtrace import tracer
import time


@tracer.wrap(service="addition")
def handler():
    time.sleep(2)
    print(1+2)

handler()
Run Code Online (Sandbox Code Playgroud)

现在,我尝试从“datadog_app:v_1: 交互式图像”运行 docker 容器,并确保使用以下命令公开端口 8126:

docker run -it -p 8126:8126 datadog_app:v_1
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ERROR:ddtrace.internal.writer:failed to send traces to Datadog Agent at http://localhost:8126
Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/tenacity/__init__.py", line 407, in __call__
    result = fn(*args, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/ddtrace/internal/writer.py", line 356, in _send_payload
    response = self._put(payload, headers)
  File "/usr/local/lib/python3.6/dist-packages/ddtrace/internal/writer.py", line 332, in _put
    conn.request("PUT", self._endpoint, data, headers)
  File "/usr/lib/python3.6/http/client.py", line 1281, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/usr/lib/python3.6/http/client.py", line 1327, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.6/http/client.py", line 1276, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/usr/lib/python3.6/http/client.py", line 1042, in _send_output
    self.send(msg)
  File "/usr/lib/python3.6/http/client.py", line 980, in send
    self.connect()
  File "/usr/lib/python3.6/http/client.py", line 952, in connect
    (self.host,self.port), self.timeout, self.source_address)
  File "/usr/lib/python3.6/socket.py", line 724, in create_connection
    raise err
  File "/usr/lib/python3.6/socket.py", line 713, in create_connection
    sock.connect(sa)
OSError: [Errno 99] Cannot assign requested address

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/dist-packages/ddtrace/internal/writer.py", line 458, in flush_queue
    self._retry_upload(self._send_payload, encoded, n_traces)
  File "/usr/local/lib/python3.6/dist-packages/tenacity/__init__.py", line 404, in __call__
    do = self.iter(retry_state=retry_state)
  File "/usr/local/lib/python3.6/dist-packages/tenacity/__init__.py", line 361, in iter
    raise retry_exc from fut.exception()
tenacity.RetryError: RetryError[<Future at 0x7f32383f0a58 state=finished raised OSError>]
Run Code Online (Sandbox Code Playgroud)

我还尝试运行以下命令:

docker run -it --expose=8126 datadog_app:v_1
Run Code Online (Sandbox Code Playgroud)

但我遇到了同样的错误。我的目标是在包含 python 应用程序的同一容器内运行 datadog-agent。有人可以解释我的代码或运行命令有什么问题吗?