如何将主机环境变量(如用户名和主机名)传递给dockerfile?
例如,如果我的用户名为taha
:
echo $USER
taha
如何编写Docker文件以获得相同的输出?
FROM centos:centos7
ARG myuser=$USER
CMD echo $myuser
答案 0 :(得分:9)
我遇到了同样的问题。我的解决方案是在docker-compose.yml中提供变量,因为yml支持使用环境变量。
在我看来,这对我来说是最有效的方式,因为我不喜欢在{1}}
之类的命令行中反复输入它声明docker run -e myuser=$USER . . .
将不起作用,在容器中,ENV myuser=$USER
将设置为$myuser
。
所以你的docker-compose.yml看起来像这样:
null
可以使用短命令version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
environment:
- "myuser=${USER}"
要检查是否已应用变量,请运行docker-compose up
以列出容器中的所有变量。
答案 1 :(得分:4)
启动docker容器时,可以使用-e
选项传递环境变量,如下所示:
docker run -it <image> -e USER=$USER /bin/bash
答案 2 :(得分:0)
我有一个类似的用例,我想能够为图像指定一个版本。这有一些额外的要求,您必须指定ARG
before the FROM
。
首先我们在IMAGE_VERSION
中指定Dockerfile
,我还包含一个我们也可以传递的USER
参数:
# give it a default of latest
# declare the ARG before FROM
ARG IMAGE_VERSION=latest
FROM centos:${IMAGE_VERSION}
ARG myuser
CMD echo $myuser
然后,根据args
上的Docker compose文档:
添加构建参数,它们是只能在构建过程中访问的环境变量。
例如,您可以在docker-compose.yml
中添加它们:
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
args:
"myuser=${USER}"
IMAGE_VERSION
然后,只要您在环境中设置了IMAGE_VERSION
,它就会通过。
答案 3 :(得分:-2)