【发布时间】:2021-08-11 04:04:11
【问题描述】:
有没有办法将 .env-file 变量从 docker-compose up(或 docker-compose build)调用传递到 Dockerfile 执行环境中,而不需要真正奇怪的 hack?
我需要传递将在构建时环境中使用的 USER NAME 变量才能成为该用户。
我今天尝试这样做,并用不同的方法花费了 6 多个小时,但没有一种方法允许我使用预制的 .env 文件用户变量。遗憾的是,只有当我将用户名硬编码到 Dockerfile 中时,它才对我有用。
我今天在 stackoverflow 上花了很多时间阅读所有答案并定制我的环境,但我仍然无法达到我想要做的事情。我知道有很多类似的问题。但他们似乎没有任何帮助......
我们将不胜感激!谢谢...
附:示例 .env:
version: '3'
services:
terra-validator:
image: terra-validator
env_file:
- terra-validator/variables.env
environment:
- NEWUSER=${NEWUSER}
build:
context: terra-validator
dockerfile: Dockerfile
args:
- NEWUSER=$NEWUSER
Dockerfile:
ARG NEWUSER
ENV NEWUSER $NEWUSER
RUN adduser $NEWUSER
USER $NEWUSER
CMD whoami
Adduser 和 useradd 命令不起作用...根据我的方法,它们总是打印出相同的 3-4 类错误...
【问题讨论】:
-
#1 如果你的 Dockerfile 需要一个 .env 文件,为什么不在你的 Dockerfile 附近创建它并使用 COPY 或 ADD 呢? #2 您是否需要在 docker build 时刻发送一个简单的字符串以在您的 Dockerfile 中使用?例如,接收一个字符串并以该字符串为名称创建一个文件夹?
-
你的 Docker 镜像不应该依赖于任何特定的主机用户;如果其他用户运行它,您不必重建您的图像。可以在 Dockerfile 中使用固定的用户名吗?如果您在执行此操作时遇到问题,您可以编辑示例以获得更多详细信息吗?
标签: docker docker-compose environment-variables