duankangpazhuo0347 2013-11-10 23:53
浏览 122

Docker echo环境变量

I'm trying to write a little docker file that sets a User and just echos the current user as a little example to prove to myself it is working. I've tried a number of variants and couldn't find much help in the documentation.

FROM ubuntu
USER daemon
# ENTRYPOINT ["echo", "$USER"]
# just gives "$USER"
# ENTRYPOINT ["echo", "-e", "${USER}"]
# just gives "$USER"
# gives empty string
# ENTRYPOINT ["/bin/echo", "$USER"]
# just gives "$USER"

I'm running docker build . on the dockerfile and then running docker run <image-id> and getting the results

Expected result is daemon, or without the USER daemon line, I expect root. Probably a really simple answer.

  • 写回答

3条回答 默认 最新

  • dongzhuo0895 2013-11-11 14:39

    This is the expected behavior, as weird as it seems!

    When ENTRYPOINT is a list (as in ENTRYPOINT ["echo", "$USER"]), it is used as-is, without further parsing or interpretation. So $USER remains $USER, because there is no shell involved in the process to replace it with the value of the USER environment variable.

    Now, when ENTRYPOINT is a string (as in ENTRYPOINT echo $USER), what is actually executed is sh -c "echo $USER", and $USER is replaced with the value of the environment variable (as you would expect).

    However, the environment variable USER is not set by default. It is set by the login process; and when you just run sh -c ... the login process is not involved.

    Compare the environment when running docker run -t -i ubuntu bash and docker run -t -i ubuntu login -f root. In the former case, you will get a very basic environment; in the latter case, you will get the complete environment that you are used to (including USERvariable).

    本回答被题主选为最佳回答 , 对您是否有帮助呢?



  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 前端echarts坐标轴问题
  • ¥15 CMFCPropertyPage
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题
  • ¥15 谁会P4语言啊,我想请教一下
  • ¥15 这个怎么改成直流激励源给加热电阻提供5a电流呀
  • ¥50 求解vmware的网络模式问题 别拿AI回答