如何将主机环境变量(例如用户和主机名)传递给dockerfile?
例如,如果我的用户名是 taha
:
echo $USER
taha
如何编写Docker文件以获得相同的输出?
FROM centos:centos7
ARG myuser=$USER
CMD echo $myuser
如何将主机环境变量(例如用户和主机名)传递给dockerfile?
例如,如果我的用户名是 taha
:
echo $USER
taha
如何编写Docker文件以获得相同的输出?
FROM centos:centos7
ARG myuser=$USER
CMD echo $myuser
我曾经遇到同样的问题。我的解决方案是在docker-compose.yml文件中提供变量,因为yml支持使用环境变量。
在我看来,这对我来说是最有效的方法,因为我不喜欢在命令行中反复输入类似于docker run -e myuser=$USER . . .
这样的内容。
声明ENV myuser=$USER
将不起作用,容器中的$myuser
将被设置为null
。
所以你的docker-compose.yml文件可能会像这样:
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
environment:
- "myuser=${USER}"
该应用可以使用简短的命令docker-compose up
来运行。
为了检查变量是否已经应用,运行docker exec -it container-name printenv
以列出容器中的所有变量。
-e
选项传递环境变量, 如下所示:docker run -it <image> -e USER=$USER /bin/bash
docker run -it <image> -e USER /bin/bash
。 - Joshua CoadyFROM
之前指定 ARG
。Dockerfile
中指定 IMAGE_VERSION
,与问题中一样,我还包括了一个可以传递的 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
然后,就像Docker compose文档中args
所述:
添加构建参数,这些参数是仅在构建过程中访问的环境变量。
例如,您可以在docker-compose.yml
中添加这些参数:
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
args:
"myuser=${USER}"
IMAGE_VERSION
IMAGE_VERSION
,它就会被传递。