【问题标题】:DOCKER ASSIGN a shell value to ENV in DOCKERFILEDOCKER 在 DOCKERFILE 中将 shell 值分配给 ENV
【发布时间】:2021-06-18 08:04:56
【问题描述】:

我正在寻找将值传递给DOCKERFILE 中的ENV 变量的解决方案。

EX:

FROM alphine

COPY domainname.txt .

ENV NAME=$(cat /domainname.txt)

【问题讨论】:

  • Dockerfile 是构建镜像的秘诀。它不是在您运行映像时运行的程序。 dockerfile 中的 ENV 语句设置 dockerfile 的默认值。通过在docker run 命令上指定-e 选项,您可以在运行映像时覆盖该值。
  • 感谢您的快速响应 .. 我希望我的图像包含所有必需的环境来启动 db_container。我不想通过 docker-compose 或 docker run 传递环境..
  • 您希望它们在构建时嵌入到映像中,还是希望在运行时从文件(如 domainname.txt)中传递它们?
  • 嵌入是真的..
  • 那你已经做了就好了。你能解释一下你认为它有什么问题吗?

标签: docker shell docker-compose dockerfile


【解决方案1】:

如果你在 docker build 时坚持要获取NAME 的值,你可以使用next:

Dockerfile:

FROM alpine

ARG NAME
ENV NAME=${NAME}

域名.txt:

hello

执行:

$ docker build --build-arg NAME=$(cat ./domainname.txt) -t abc:1 . --no-cache
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM alpine
 ---> d4ff818577bc
Step 2/3 : ARG NAME
 ---> Running in f1c58e816499
Removing intermediate container f1c58e816499
 ---> dc4d5894440b
Step 3/3 : ENV NAME=${NAME}
 ---> Running in 9b8f98a3857c
Removing intermediate container 9b8f98a3857c
 ---> 2b0c68ddc994
Successfully built 2b0c68ddc994
Successfully tagged abc:1
$ docker run --rm -it abc:1 env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=2155d7368c3e
TERM=xterm
NAME=hello
HOME=/root

您可以看到上面的NAME 被分配为hello

简单解释:

  1. NAME=$(cat ./domainname.txt)hello 分配给 NAME
  2. --build-arghello 传递给 docker build 的 ARG NAME
  3. ENV NAME=${NAME}ARG NAME 获取 hello

【讨论】:

  • 抱歉,我清楚地提到我希望预先构建所有必需的环境
猜你喜欢
  • 2021-10-16
  • 2019-05-27
  • 2015-11-21
  • 2021-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多