我在容器中使用 Alpine Linux。ENV PATH="~/.local/bin:$PATH" \
我的 Dockerfile 中有
当登录到 shell 时,我可以成功ls ~/.local/bin
,与 相同ls /root/.local/bin
,目标二进制文件就在那里。
不过,我直接调用二进制文件,否则which mybin
它将无法工作。显式添加后/root/.local/bin
,就可以了。
我不确定为什么会发生这种情况,因为~/.local/bin
和/root/.local/bin
是相同的。
有任何想法吗?谢谢!
编辑:
重复链接让我对发生的事情有了一些了解,但我发现这不是主要原因。删除引号仍然不起作用,因为 DockerfileENV
指令不会执行任何 shell 扩展。
似乎唯一可行的方法是在指令export &&
中使用CMD
。
也不$HOME
符合ENV
指令。
答案1
虽然我不确定您使用的是哪个 shell,但假设是 bash,您将需要指定$HOME
而不是除了交互式命令行之外,在其他地方~
使用是不安全的。~
内部脚本中的某些位置~
也可以工作,但在变量内部定义它们可能会产生意想不到的结果,正如您所经历的那样。
您还可以回显$PATH
以查看内容是什么。
echo $PATH
您将看到,在当前的实现中,它将包含路径,而不是字面意义上的自我~/.local/bin
扩展。/root/.local/bin
~