Docker的echo环境variables
我试图写一个小docker文件,设置一个用户,只是回声当前用户作为一个小例子certificate自己它正在工作。 我已经尝试了一些变体,在文档中找不到太多的帮助。
FROM ubuntu USER daemon # ENTRYPOINT ["echo", "$USER"] # just gives "$USER" # ENTRYPOINT ["echo", "-e", "${USER}"] # just gives "$USER" # ENTRYPOINT echo $USER # gives empty string # ENTRYPOINT ["/bin/echo", "$USER"] # just gives "$USER"
我正在运行docker build .
在dockerfile上,然后运行docker docker run <image-id>
并获取结果
预期的结果是daemon
,或者没有USER daemon
行,我期望root
。 可能是一个非常简单的答案。
这是预料之中的行为,就像看起来那样奇怪!
当ENTRYPOINT
是一个列表(如ENTRYPOINT ["echo", "$USER"]
)时,它是按原样使用的,不需要进一步parsing或解释。 因此, $USER
仍然是$USER
,因为在进程中没有涉及用USER
环境variables的值replace它的shell。
现在,当ENTRYPOINT
是一个string(如在ENTRYPOINT echo $USER
)时,实际执行的是sh -c "echo $USER"
, $USER
被replace为环境variables的值(如你所期望的那样)。
但是,默认情况下不设置环境variablesUSER
。 它由login过程设置; 而当你只是运行sh -c ...
login过程不涉及。
运行docker run -t -i ubuntu bash
和docker run -t -i ubuntu login -f root
时比较环境。 在前一种情况下,你会得到一个非常基本的环境; 在后一种情况下,您将得到您习惯的完整环境(包括USER
variables)。
我想这里有一系列的问题。
当我
docker run -i -t ubuntu /bin/bash echo $USER set
我没有看到$ USER被设置,但是whoami却报告守护进程。
此外,我有怀疑(但还没有看过代码),在Dockerfile的ENVvariables逃脱,以避免它们的使用(许多人认为他们可以将主机variables导出到构build的容器,但这是docker工人想避免)
不能在Dockerfile中将ENV
命令设置为默认值,然后在运行容器时使用-e, --env
字典来覆盖将由以下内容解释的内容:
ENTRYPOINT echo $SOMEENVVAR
进入forms?
- 在Docker Container或cron job中运行Go脚本?
- Docker Golang SDK – 如何将容器标准输出redirect到一个文件
- 无法正常closuresdocker进程
- 在Docker上更改文件时重build
- 如何检索只在go-dockerclient中运行特定映像的容器?
- 在docker golang api的docker中设置容器的端口
- Docker返回“json:can not unmarshal string into Go value of type string”
- 从头开始非特权执行
- 在docker api的golang sdk中为ContainerCreate函数设置PortBindingsconfiguration