![](/img/trans.png)
[英]How to get into Docker container's shell when bash is not available?
[英]docker ubuntu container: shell linked to bash still starts shell
好吧,伙計們,所以我嘗試在基於ubuntu:14.04的docker容器中安裝rvm。 在這個過程中,我發現有些人做了這樣的事情,以確保docker命令也與bash一起運行:
RUN ln -fs /bin/bash /bin/sh
現在奇怪的事情發生了,我希望你們中的某個人可以向我解釋:
→ docker run -it --rm d81ff50de1ce /bin/bash
root@e93a877ab3dc:/# ls -lah /bin
....
lrwxrwxrwx 1 root root 9 Mar 1 16:15 sh -> /bin/bash
lrwxrwxrwx 1 root root 9 Mar 1 16:15 sh.distrib -> /bin/bash
...
root@e93a877ab3dc:/# /bin/sh
sh-4.3# echo $0
/bin/sh
有人能解釋一下這里發生了什么嗎? 我知道我可以在dockerfile w / bash -c
我的命令前綴,但是我想了解這里發生了什么,如果可能的話,仍然會拋棄dockerfile中的bash -c
前綴。
非常感謝,羅賓
這是因為bash有一個兼容模式,它試圖模擬sh
如果它是通過名稱sh
啟動的,如手冊頁所示:
如果使用名稱sh調用bash,它會嘗試盡可能接近地模仿sh的歷史版本的啟動行為,同時也符合POSIX標准。 當作為交互式登錄shell或帶有--login選項的非交互式shell調用時,它首先嘗試按順序從/ etc / profile和〜/ .profile中讀取和執行命令。 --noprofile選項可用於禁止此行為。 當作為具有名稱sh的交互式shell調用時,bash查找變量ENV,如果已定義則展開其值,並使用擴展值作為要讀取和執行的文件的名稱。 由於以sh調用的shell不會嘗試從任何其他啟動文件讀取和執行命令,因此--rcfile選項無效。 使用名稱sh調用的非交互式shell不會嘗試讀取任何其他啟動文件。 當調用為sh時,bash在讀取啟動文件后進入posix模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.