当前位置: 首页 > 面试题库 >

如何让/ etc / profile在Alpine / Docker中自动运行

张承颜
2023-03-14
问题内容

/etc/profile交互启动Alpine
Docker容器时如何自动运行?我已经向aliases.sh文件中添加了一些别名并将其放置在中/etc/profile.d,但是当我使用来启动容器时docker run -it [my_container] sh,我的别名没有处于活动状态。我. /etc/profile每次必须从命令行手动键入。

/etc/profile登录时是否需要其他配置才能运行?我在使用~/.profile文件时也遇到了问题。任何见解表示赞赏!

编辑:

根据VonC的回答,我拉出并运行了他的示例ruby容器。这是我得到的:

$ docker run --rm --name ruby -it codeclimate/alpine-ruby:b42
/ # more /etc/profile.d/rubygems.sh
export PATH=$PATH:/usr/lib/ruby/gems/2.0.0/bin
/ # env
no_proxy=*.local, 169.254/16
HOSTNAME=6c7e93ebc5a1
SHLVL=1
HOME=/root
TERM=xterm
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/
/ # exit

尽管该/etc/profile.d/rubygems.sh文件存在,但是在我登录并且PATH未更新我的环境变量时,该文件没有运行。我使用了错误的docker run命令吗?还有其他东西吗?有没有人~/.profile/etc/profile.d/文件可以在Docker上与Alpine一起使用?谢谢!


问题答案:

您仍然可以在Dockerfile中尝试以下操作:

RUN echo '\
        . /etc/profile ; \
    ' >> /root/.profile

(假设当前用户是root。如果不是,请替换/root为完整的主路径)

话虽如此,那些/etc/profile.d/xx.sh应该运行。
参见codeclimate/docker-alpine-ruby示例:

COPY files /

用“ files/etc
files/etc/profile.d/rubygems.sh运行就可以了。

在OP项目中
Dockerfile,有一个

COPY aliases.sh /etc/profile.d/

但是默认外壳 不是 登录外壳(sh -l),这意味着profile文件(或/etc/profile.d
__其中的
文件)
不是
源文件。

添加sh -l将起作用:

docker@default:~$ docker run --rm --name ruby -it codeclimate/alpine-ruby:b42 sh -l
87a58e26b744:/# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/ruby/gems/2.0.0/bin


 类似资料:
  • 问题内容: 我在Docker中安装pipenv: 我收到错误: 如果我跑步 相反,即时通讯收到另一个错误: 但是当我改为执行以下操作时: 这是工作… 于是两个问题:第一:为什么给我这个错误,第二:为什么我必须做之前得到它的工作? 我想使用pipenv创建具有不同python版本和不同依赖版本的虚拟环境。 问题答案: 考虑到您的问题,据我所知,最简单的方法是更新到的最新版本。它仍在开发中,因此很快就

  • 问题内容: 我的目录仅包含两个文件,并且: 在读 并且仅包含 在成功生成: 但是,如果尝试这样做,则会出现错误: 是什么原因造成的?(我记得以类似的方式在基于图像的脚本中运行脚本,所以也许它是Alpine特有的)? 问题答案: Alpine附带ash作为默认外壳,而不是。 所以你可以 有一个shebang将/ bin / bash定义为sayhello.sh的第一行,因此您的文件sayhello.

  • 问题内容: 我正在尝试在Alpine 3.10 docker容器中专门运行GeckoDriver v0.26.0 。 在弄清楚一些事情之后,我碰壁了: 我想念什么? 我怎么到这里 首先启动docker容器: 然后尝试安装GeckoDriver 真?但我只是提取了它…嗯…好 提取正确吗?是对的吗 是。好吧,让我们用谷歌搜索。好吧,也许我应该检查一下信息。默认情况下,Alpine没有。 对于同一问题的

  • 如何在高山容器中安装Docker并运行docker映像?我可以安装,但无法启动docker,并且在运行时获取“docker命令未找到错误”。

  • 问题内容: 要为Ubuntu映像启动交互式shell,我们可以运行: 但是,对于Alpine Docker映像运行此命令时,将得到以下结果: 在Alpine基本容器中启动交互式Shell的命令是什么? 问题答案: 上面使用的选项: 是BusyBox提供的Ash(Almquist Shell)。 退出时自动移除容器() 交互模式(即使未连接也保持STDIN打开) 分配伪TTY