首页 > 解决方案 > 如何在 docker 入口点中运行导出命令?

问题描述

我正在尝试将 Datadog APM 跟踪和日志收集集成到在 Docker 上运行的 python 应用程序中。在 Dockerfile 中,我需要激活 conda 虚拟环境并导出一个环境 DD_AGENT_HOST。

FROM continuumio/miniconda3

WORKDIR /app

COPY src ./src
COPY application.yaml .
COPY wsgi.py .
COPY gunicorn.conf.py .
COPY logging.ini .

RUN conda env create -f application.yaml

SHELL ["conda", "run", "-n", "dd_venv", "/bin/bash", "-c"]

ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "dd_venv", "ddtrace-run", "gunicorn", "-c", "gunicorn.conf.py", "wsgi:app", "--preload"]

我可以使用上面的 Dockerfile 运行应用程序。但是,应用程序需要导出环境 DD_AGENT_HOST 才能与 Datadog 连接,并且必须通过 HTTP 请求检索 DD_AGENT_HOST 的值。

ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "dd_venv", "export DD_AGENT_HOST=$(wget <ip_ddress>)", "ddtrace-run", "gunicorn", "-c", "gunicorn.conf.py", "wsgi:app", "--preload"]

我尝试如上所述将导出命令添加到 ENTRYPOINT,这导致 Docker 运行失败并出现错误“export DD_AGENT_HOST=: command not found:.

完成此操作的正确方法是什么?

标签: pythondockercondagunicorndatadog

解决方案


由于您是通过激活的 Conda 环境运行它,因此应该可以将激活脚本添加到包含该命令的环境中。例如,像这样的文件:

/path/to/envs/dd_venv/etc/conda/activate.d/env_vars.sh

#!/bin/sh

export DD_AGENT_HOST=$(wget <ip_address>)

请参阅有关保存环境变量的文档

请注意,对于静态环境变量(例如,您事先知道的字符串),这些可以直接集成到您的application.yaml文件中。请参阅有关设置环境变量的文档


推荐阅读