2017-02-20 31 views
0

我嘗試爲Docker容器bash提示設置自定義配置,以在連接時顯示git分支名稱。自定義碼頭容器bash

我發現一切正常,但我未能在容器的大樓執行~/.profile甚至~/.bash_profile文件。

如果我在容器內手動執行source ~/.profile,它工作正常。但我不希望我的用戶輸入任何命令來啓用自定義提示。

我試圖把RUN /bin/bash -c "source /root/.profile"RUN source /root/.profile在我Dockerfile,source /root/.profileentrypoint.sh文件沒有任何成功。

我在運行docker run時看到了一些解決方案,但我使用的是docker-compose。

謝謝大家,如果您有任何建議:D!

+0

您能夠指定'-l'標誌到'bash':

exec "[email protected]" 

然後,您可以使用泊塢窗命令運行的bash命令?這將導致一個子shell'bash'初始化與登錄shell相同的方式,這會導致它調用配置文件。 –

+0

我在我的docker-entrypoint.sh中試過了: '/ bin/bash -l -c「source /root/.profile」''。但沒有做更多的事情!我做錯了嗎? – Kern

+0

因爲我猜你可以做同樣的docker-compose,所以'docker run -v〜/ .profile'或者'docker run -v〜/ .bash_profile'有問題嗎? – user2915097

回答

1

我不確定使用〜/ .profile配置文件是做你想做的最好的方法。此外,使用RUN source /root/.profile將不會產生任何影響,因爲該行只會執行一次,並且在嘗試執行容器內的bash二進制文件時不會持久化。 (它實際上會運行一個新的bash會話)。

所以..首先,你試圖做的配置應該在.bashrc文件中(因爲它是它通常出現的地方)。

然後,bash的手冊頁說:

當bash是作爲交互的登錄shell,或者作爲 非交互的shell與--login選項,它首先讀取和執行 如果該文件存在,則從/ etc/profile文件中執行命令。 讀取文件後,它會尋找在〜/ .bash_profile,〜/ .bash_login文件, 和〜/ .profile文件,依次

和:

當一個交互的shell但不如果存在 這些文件,則啓動登錄shell,bash 讀取並執行/etc/bash.bashrc和〜/ .bashrc中的命令。

你應該做的:

在Dockerfile:

COPY config/.bashrc /root/.bashrc 

要複製到你的容器位於在配置回購.bashrc文件。這是你應該把你的配置。

然後,在入口點:

docker run XXX /bin/bash 
+0

謝謝Seb,就是這樣:D!我在.bashrc文件中添加了行,它在第一次運行時就起作用了! – Kern