Docker exec 不加载别名

Dav*_*ter 7 bash alias container docker

我有一个 bash 别名加载到 Docker 容器中,在/etc/bash.bashrc. 它用作命令行 PHP 脚本的快捷方式。这很方便,因为任何人都可以在登录容器后直接使用该别名,如下所示:

$ docker exec -it my-container bash

但是,我还希望能够在不登录的情况下在一次性命令中使用此别名,例如:

$ docker exec -it my-container my-alias

我尝试了不同的变体,例如在 以外的其他地方定义别名/etc/bash.bashrc,但我一直遇到这个错误:

rpc 错误:code = 2 desc = oci 运行时错误:exec 失败:exec:“my-alias”:在 $PATH 中找不到可执行文件

到目前为止,我在网上找到的其他建议并没有奏效。任何人?

Pit*_*kos 5

它不是由于别名旨在交互使用而造成的限制。您可能可以解决这个问题,但迄今为止最简单的解决方案是简单地将您的“别名”放入脚本并将其放入/bin.

文件

RUN echo '#! /bin/sh'                >> /bin/mycommand
RUN echo 'echo "running mycommand!"' >> /bin/mycommand
RUN chmod u+x /bin/mycommand
Run Code Online (Sandbox Code Playgroud)

然后它按预期工作

docker exec -it f3a34 mycommand # => running mycommand!
Run Code Online (Sandbox Code Playgroud)


Dav*_*ter 0

最终我采取了稍微不同的方法,因为我还没有设法让它与bash.bashrc策略一起工作。@joat 是对的,别名可能是与命令行的部分执行(使用docker exec)的不幸组合。

最后,我将一个脚本(在我的例子中是通过 PHP Composer)注入到图像中。就我而言,通过安装本地目录,尽管这并不重要。Dockerfile然后我通过环境变量添加此脚本的路径:

ENV PATH $PATH:./vendor/bin

这使得脚本在运行时全局可用。

我确实认为这是一种解决方法,但我很想听听那些真正在运行时使用常规别名的人的意见docker exec