More  

收藏本站

電腦請使用 Ctrl + D 加入最愛
手機請使用 收藏
關閉

小編的世界 優質文選 c113

一起學Docker27:如何在容器重建後,仍舊保留之前的bash歷史?


字體大小:
2021年10月26日 -
:     
 

矻矻來福Krave

bash 命令行歷史可以讓我們快速重複之前使用過的命令,也可以檢查之前輸入的命令是否存在什麼問題。你只需要在命令行終端,按向上 ↑ 箭頭按鈕就能查看 bash 歷史。可以說是非常好用的功能。但是重新構建容器的話,或者切換會話的話,之前的歷史記錄就都丟失了。不過辦法總比困難多。今天就來說一說,怎樣可以做到,即便是重建容器,仍舊能保留 bash 歷史。

首先,更新 Dockerfile ,使得每次 bash 中使用命令,都會更新歷史,並把歷史保存在持久化的路徑中。

如果你是 root 用戶,可以這樣更新 Dockerfile :

如果你是 非root 用戶,可以這樣更新 Dockerfile 。

將 user-name-goes-here 替換成你容器中 非root用戶 的用戶名。

整個邏輯是:設置 PROMPT_COMMAND 環境變量,設為:展示所有 ( all 即 -a )歷史。然後將 HISTFILE 變量設為存放歷史記錄的路徑。如果需要,再創建 /commandhistory 路徑以及 .bash_history 文件,設置文件的權限以便用戶有權寫入文件。最後,把這段命令片段寫入用戶的 .bashrc 文件。這樣每次啟動容器,都會執行這個代碼片段。

接著添加本地卷來存儲命令行歷史。這一步會根據你使用 Dockerfile 或 image,還是使用 Docker Compose 而有所不同。

如果使用的是 Dockerfile 或 image:

在 devcontainer.json 文件中,使用 mounts 屬性:

如果使用的是 Docker Compose :

更新或擴展你的 docker-compose.yml 文件,針對目標服務,做如下修改:

最後,為了讓所做的修改能夠生效,如果已經構建過容器,並且已連接容器,可以在 Command Palette 中運行 Remote-Containers: Rebuilld Container 命令;如果沒有,則運行 Remote-Containers: Open Folder in Container 命令。

之後,無論你怎麼重構容器,之前輸入過的命令行歷史都會被保留下來。歡迎關注我的賬號,我將持續更新。我們下期,不見不散。