![将 Shell 别名文件复制到容器后不起作用,使用源命令后可以起作用吗?](https://linux22.com/image/779804/%E5%B0%86%20Shell%20%E5%88%AB%E5%90%8D%E6%96%87%E4%BB%B6%E5%A4%8D%E5%88%B6%E5%88%B0%E5%AE%B9%E5%99%A8%E5%90%8E%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%8C%E4%BD%BF%E7%94%A8%E6%BA%90%E5%91%BD%E4%BB%A4%E5%90%8E%E5%8F%AF%E4%BB%A5%E8%B5%B7%E4%BD%9C%E7%94%A8%E5%90%97%EF%BC%9F.png)
我正在复制aliases.sh
到基于高山的容器中:
FROM php:8.1-fpm-alpine AS php
COPY .docker/aliases.sh /etc/profile.d/
CMD ["php-fpm"]
当我登录到 shell 时,我的别名不起作用。如果我运行:
source /etc/profile
突然开始工作了。也许我需要添加source
命令Dockerfile
,但是……这对我来说没有意义。
答案1
Unix shell 通常只/etc/profile
在作为登录 shell 启动时加载文件。Alpine 上的默认 shell Ash 也是这样做的。
来自灰手册:
登录 shell 首先从文件 /etc/profile 和 .profile 读取命令(如果存在)。
使用 启动 shell-l
应该将其作为登录 shell 启动,并且它应该读取/etc/profile
。
ash -l
答案2
ENV ENV="/etc/profile"
是我解决问题的方法。已将其添加到Dockerfile
。现在,无论我如何登录容器(使用 Docker Desktop、VS Code docker 扩展等),我都可以使用 提供的别名aliases.sh
。