使用Docker Compose,如何将环境变量传递给应用程序用户外壳程序,以便在该用户运行命令时始终加载环境变量?
例如,我已经尝试通过Dockerfile:
FROM phusion/passenger-ruby26
ENV FOO=bar
RUN dpkg --clear-avail
RUN rm -rf /var/lib/apt/lists/*
RUN apt-get -qq update --fix-missing
RUN apt-get -qq install -f
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get clean
RUN apt-get -qq install -y build-essential apt apt-utils \
software-properties-common wget inetutils-ping \
sudo netcat
COPY --chown=app:app . .
ENTRYPOINT ["sh", "./startup.sh"]
startup.sh是:
_user="$(id -u -n)"
echo "User name : $_user"
su - app -c 'echo "**************** root printenv:"'
printenv
su - app -c 'echo "**************** app printenv:"'
su - app -c 'printenv'
当我不使用sudo时,我可以看到build
/ run
的输出包含许多现有/预设变量-但没有FOO
。printenv
中的变量以root身份运行。但是,该变量不适用于应用程序用户。
向用户app
提供FOO的最佳方法是什么?非常感谢您的帮助。