gpt4 book ai didi

docker - 一种将构建时参数从 .env 文件传递​​给 Docker 的方法

转载 作者:行者123 更新时间:2023-12-05 04:46:44 25 4
gpt4 key购买 nike

有没有一种方法可以将 .env-file 变量从 docker-compose up(或 docker-compose build)调用传递到 Dockerfile 执行环境中,而无需真正奇怪的黑客攻击?

我需要传递将在构建时环境中使用的 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

docker 文件:

ARG NEWUSER
ENV NEWUSER $NEWUSER
RUN adduser $NEWUSER
USER $NEWUSER
CMD whoami

Adduser 和 useradd 命令不起作用...根据我的方法,它们总是打印出相同的 3-4 种类型的错误...

最佳答案

你没有给出完整的错误,所以这里只给你一个可行的解决方案,仅供引用:

docker-compose.yaml:

version: '3'
services:
terra-validator:
image: terra-validator
build:
context: terra-validator
dockerfile: Dockerfile
args:
- NEWUSER=$NEWUSER

.环境:

NEWUSER=tester

terra-validator/Dockerfile:

FROM ubuntu:16.04

ARG NEWUSER
ENV NEWUSER $NEWUSER
RUN adduser $NEWUSER --disabled-password --gecos "First Last,RoomNumber,WorkPhone,HomePhone"
USER $NEWUSER
CMD whoami

执行:

$ docker-compose up
Creating network "20210811_default" with the default driver
Building terra-validator
Step 1/6 : FROM ubuntu:16.04
---> 065cf14a189c
Step 2/6 : ARG NEWUSER
---> Using cache
---> 6c11feb31ac0
Step 3/6 : ENV NEWUSER $NEWUSER
---> Using cache
---> 365472fb8bf2
Step 4/6 : RUN adduser $NEWUSER --disabled-password --gecos "First Last,RoomNumber,WorkPhone,HomePhone"
---> Running in 3156249774f8
Adding user `tester' ...
Adding new group `tester' (1000) ...
Adding new user `tester' (1000) with group `tester' ...
Creating home directory `/home/tester' ...
Copying files from `/etc/skel' ...
Removing intermediate container 3156249774f8
---> 8debf4402db6
Step 5/6 : USER $NEWUSER
---> Running in 5f86175c5d7b
Removing intermediate container 5f86175c5d7b
---> 400f7951c4be
Step 6/6 : CMD whoami
---> Running in 5fe9cf8cc6f8
Removing intermediate container 5fe9cf8cc6f8
---> f63f2e284104
Successfully built f63f2e284104
Successfully tagged terra-validator:latest
WARNING: Image for service terra-validator was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating 20210811_terra-validator_1 ... done
Attaching to 20210811_terra-validator_1
terra-validator_1 | tester
20210811_terra-validator_1 exited with code 0

解释:

.env中定义的值将被docker-compose.yaml中的args使用,然后传递给Dockerfile ARG。在用户设置过程中,您最好添加 --disabled-password --gecos "First Last,RoomNumber,WorkPhone,HomePhone" 来删除一些错误信息。最后,在 docker-compose up 日志中,您可以看到 whoami 打印 tester

关于docker - 一种将构建时参数从 .env 文件传递​​给 Docker 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68735884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com