【问题标题】:Passing environment variables across stages in docker multistage image在 docker 多阶段映像中跨阶段传递环境变量
【发布时间】:2019-12-03 07:21:08
【问题描述】:

我有一个 docker 镜像,它有 4 个较低的层。

我想使用多阶段减小当前映像层的大小,但这会导致跨阶段丢失环境、端口和 cmd 配置属性。有没有办法在Dockerfile 中跨阶段传递此类配置变量。

【问题讨论】:

  • 你能举一个更完整的例子吗?我想在 Dockerfile 的最后阶段以外的任何地方定义 EXPOSECMD 有点不寻常。
  • 其实我特别担心环境变量。如果我能以某种方式动态地将它们从较低层获取到最后一层。

标签: docker dockerfile environment docker-maven-plugin multistage


【解决方案1】:

您可以执行以下操作之一

使用基础容器并在那里设置环境值

FROM alpine:latest as base
ARG version_default
ENV version=$version_default

FROM base
RUN echo ${version}

FROM base
RUN echo ${version}

其他方法是使用ARGS,如下所示。有一些重复,但它变得更加集中

ARG version_default=v1

FROM alpine:latest as base1
ARG version_default
ENV version=$version_default
RUN echo ${version}
RUN echo ${version_default}

FROM alpine:latest as base2
ARG version_default
RUN echo ${version_default}

注意从https://github.com/moby/moby/issues/37345复制的示例

【讨论】:

  • 是的,谢谢,但这不会动态获取变量。
  • 动态是什么意思。您希望它们在运行时注入吗?
猜你喜欢
  • 1970-01-01
  • 2018-04-20
  • 2017-06-04
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
  • 2019-03-25
  • 2019-09-14
  • 1970-01-01
相关资源
最近更新 更多