将今天的日期设置为环境变量

M.A*_*ufi 6 environment-variables docker dockerfile docker-compose

我需要将今天的日期设置为我的 docker 容器中的环境变量。

我想做的是获取今天的日期,以便我可以使用它通过 Logstash 的 http_poller 插件调用一些 API。

我正在考虑的解决方案是使用命令获取今天的日期date +%Y%m%d

如何在运行时将此命令的结果设置为环境变量?

acr*_*ran 9

ARG应该是您正在寻找的:

FROM base

# to be able to use in Dockerfile
ARG now

# to store the value as environment variable in the image
ENV build_date=$now
Run Code Online (Sandbox Code Playgroud)

现在你可以用以下命令构建它

FROM base

# to be able to use in Dockerfile
ARG now

# to store the value as environment variable in the image
ENV build_date=$now
Run Code Online (Sandbox Code Playgroud)

这仍然需要date在主机上运行,​​因为Dockerfile不幸的是,在主机内执行此操作是不可能的:

  • 在构建中执行任意命令的唯一方法是在RUN语句中;但
  • 将变量保留到图像/容器环境中的唯一方法是使用ENV只能使用构建外部的环境变量的语句

您可以使用自定义ENTRYPOINT工具并将日期从文件注入到环境中:

FROM base

RUN date +%Y%m%d > /build-timestamp
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT /entrypoint.sh
Run Code Online (Sandbox Code Playgroud)

entrypoint.sh:

# pass value explicitly
docker build --build-arg now="$(date +%Y%m%d)" .

# pass value from environment
export now="$(date +%Y%m%d)"
docker build --build-arg now .
Run Code Online (Sandbox Code Playgroud)