如何在 Dockerfile 中设置命令历史记录

Dan*_*lan 5 bash sh docker

我在本地运行 docker 容器以对其状态进行故障排除。我并不总是想执行RUN/ ENTRYPOINT,我经常想进入正在运行的容器,做一些事情,然后运行RUN​​/ ENTRYPOINT

只需按向上键即可获得RUN/ ,这将非常方便。所以我想如果我可以用来修改历史记录就好了。这样,只要按下,我就可以按下/按钮。 ENTRYPOINTdocker run bashhistory -s ...Dockerfiledocker run bashRUNENTRYPOINT

当我将其放入 docker 文件中时,出现以下错误:

 /bin/sh: 1: history: not found
Run Code Online (Sandbox Code Playgroud)

有没有办法在 Dockerfile 中设置 bash 历史记录?

Dan*_*owe 5

您收到错误是因为RUN命令在 中运行/bin/sh,而该命令没有history可用的命令。

要实现此功能,您需要在构建期间运行交互式 bash shell,以便它将存储您的历史记录条目。

RUN bash -ic 'history -s foobar'
Run Code Online (Sandbox Code Playgroud)

这应该留下一个历史文件及其foobar最新的(也可能是唯一的)条目。

您将在构建过程中看到有关 ioctl 的错误...这是正常的,因为交互式 bash 期望找到一个终端,但实际上不会有终端。但它应该仍然可以正常工作。

bash:无法设置终端进程组 (1):设备的 ioctl 不合适
bash:此 shell 中没有作业控制

请注意,这将为您运行命令的用户存储。如果您的映像使用该语句切换到非根用户USER,您应该将其放在该USER行之后,以便它存储在您的映像运行时所使用的用户中。