【问题标题】:How to save IP to the environment Variable in docker file?如何将 IP 保存到 docker 文件中的环境变量中?
【发布时间】:2021-11-03 17:27:18
【问题描述】:

我有一个用例来获取 Dockerfile 中的主机 IP 并将其保存为 ENV 值,但我无法成功实现这一点。任何帮助表示赞赏。

下面是我的示例 Dockerfile

FROM maven:3.6.3-openjdk-11
ENV IP=${"`ip -4 route show default | cut -d\" \" -f3`"}
RUN echo $IP

【问题讨论】:

  • 你的意思是主机的IP?
  • @alexey R. 是的.. 上面的命令给出了主机 ip..我在 Linux 中理解,它总是 172.17.0.1.. 但我不想硬编码它..跨度>
  • 不,这并不总是您的想法。主机可能(并且通常确实)有多个 IP。 127.x.x.x 是一个环回 IP 范围,但也有分配给网络接口的 IP,例如 WiFi 和以太网适配器。
  • 好的,同意,这也是不硬编码的原因,因为正如你所说,它可能会改变。我想将 IP 设置为 Dockerfile 的 ENV。
  • 您能否添加更多关于您的试用结果的详细信息?您是否像展示的那样构建了图像,并且当您在容器中时看不到该设置环境?

标签: java docker maven dockerfile ip


【解决方案1】:

我认为Dockerfile只是用来构建镜像,当时容器IP没有确定。

您可以在 start.sh 中设置它或使用docker run -e

【讨论】:

    【解决方案2】:

    不支持在构建阶段评估 ENV 值。在此处查看线​​程https://github.com/moby/moby/issues/29110

    由于您的应用在执行阶段需要此值,因此您可以仅从

    FROM maven:3.6.3-openjdk-11
    
    

    然后像这样构建它

    docker build -t maven .
    

    然后像这样执行:

    docker run -ti -e IP=$(ip -4 route show default | cut -d" " -f3) maven /bin/bash
    

    这是容器中可见的结果:

    root@6856d118d02b:/# echo $IP
    192.168.0.1
    

    【讨论】:

    • 抱歉,我认为有些引号丢失了。我遇到了错误failed to solve with frontend dockerfile.v0: failed to create LLB definition: Syntax error - can't find = in "-4". Must be of the form: name=value
    • 更新了我的答案
    • 我会检查的,但是我在 Dockerfile 中对 IP 进行了一些操作。所以不确定,如果这个解决方案适合我的需要..
    • 在这种情况下,您可以使用 ARG/--build-arg 组合,如下所示stackoverflow.com/a/54887094/8343843
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 2018-08-12
    • 2020-12-07
    • 2017-06-12
    相关资源
    最近更新 更多