在 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 中在哪里设置系统默认环境变量?的主要内容,如果未能解决你的问题,请参考以下文章

docker 下 alpine 镜像设置时区的有效办法

pstree查看进程卡在哪里

docker 下 alpine 镜像设置时区的有效办法

alpine镜像时区设置

alpine image中/etc/hosts那些事

在objective-c中在哪里设置窗口大小iOS?