在 Alpine linux 中在哪里设置系统默认环境变量?
Posted
技术标签:
【中文标题】在 Alpine linux 中在哪里设置系统默认环境变量?【英文标题】:Where to set system default environment variables in Alpine linux? 【发布时间】:2016-02-10 21:03:47 【问题描述】:我知道,在 Ubuntu 中,您可以在 /etc/environment
中设置环境变量的默认值;我在 Alpine linux 中看不到该文件。是否有其他位置可以设置系统范围的默认值?
【问题讨论】:
这里 /etc/lbu/lbu.conf 怎么样 @Rick 没有看到效果。你知道在 Alpine 中有什么好的文档吗?或者您有更多关于在 Alpine 中设置 envar 的详细信息、提示和技巧吗? 我也在寻找答案……你找到什么了吗? 不幸的是我没有找到太多。我发现的唯一其他信息来自标题“配置继承”下的washington.edu/alpine/tech-notes/config-notes.html @Rick 这不是正确的 Alpine;您的 URL 指的是 Alpine Mail 用户代理,而不是适用于最小容器的基于 Linux 的操作系统。 【参考方案1】:看来/etc/profile
是我能找到的最好的地方。至少,那里设置了一些环境变量:
export CHARSET=UTF-8
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PAGER=less
export PS1='\h:\w\$ '
umask 022
for script in /etc/profile.d/*.sh ; do
if [ -r $script ] ; then
. $script
fi
done
根据/etc/profile
的内容,你可以在/etc/profile.d/
中创建一个扩展名为.sh
的文件,每次都需要传递--login
来加载环境变量,例如docker exec -it container sh --login
。
【讨论】:
当您以交互方式启动 alpine docker 容器时,如何让/etc/profile
自动运行?我在aliases.sh
文件中添加了一些别名并将其放在/etc/profile.d
中,但是当我使用docker run -it [my_container] sh
启动容器时,我的别名没有激活。我每次都必须从命令行手动输入. /etc/profile
。是否需要其他一些配置才能让/etc/profile
在登录时运行?任何见解都值得赞赏!
@JeffKilbride 使用sh --login
而不仅仅是sh
。
@VladFrolov 谢谢!我在另一个帖子中问了这个问题,也在那里得到了答案。这也有效:sh -l
.
@Tonsic 你可能会发现有趣的this solution 用于使用 sudo 保存环境变量。
对于任何想知道的人。这也适用于非 root 用户 cronjobs。例如。使用以 root 身份运行 crond 的 Docker 容器。并为用户 foo 提供一个 crontab,该 crontab 运行一个需要来自 /etc/profile 的环境变量的 cronjob。【参考方案2】:
如果您谈论的是 Alpine Docker 映像,那么您可以在 Dockerfile 中定义这些环境变量,如下所示。这里不需要每次都传递--login
。这些变量将自动在系统范围内全局可用。
FROM alpine
ENV GITHUB_TOKEN=XXXXXXXXXXXXXXXXXXXXXXX \
COMPOSER_HOME=/home/deploy/.composer
您还可以在 /etc/profile 中定义别名、环境等,并在 Dockerfile 中定义 ENV
,如下所示以自动获取配置文件。
FROM alpine
ENV GITHUB_TOKEN=XXXXXXXXXXXXXXXXXXXXXXX \
COMPOSER_HOME=/home/deploy/.composer
ENV ENV="/etc/profile"
【讨论】:
这实际上是一个非常好的替代方案,没有 --login 的开销。谢谢! 快速说明:ENV
设置的值将被所有其他使用您的图像作为FROM
的 docker 图像继承。当您的/etc/profile
在其他子图像中可用时,可能会产生意想不到的后果以上是关于在 Alpine linux 中在哪里设置系统默认环境变量?的主要内容,如果未能解决你的问题,请参考以下文章