2014-06-20 78 views
13

我想使用Dockerfile來構建圖像。但是,命令在運行時將需要用戶輸入。目前,構建不成功,因爲docker在用戶輸入時退出。我知道我可以在docker run命令中使用-i -t選項,但是我想在Dockerfile上執行此操作。這怎麼可能?交互式碼頭構建從dockerfile?

+0

這取決於什麼userinput,如果它是用戶輸入的apt-get更新爲例,那麼你可以添加-y總是說是。否則,運行一些採用userinput的方法,將其保存在環境變量中,然後將其從環境變量中提取出來。 –

+0

我正在運行'rvmsudo passenger-install-nginx-module'。我不確定你的建議是否適用於此。 – Keeto

+1

在這種情況下,我將使用已安裝的模塊(手動輸入所需數據)構建基礎映像,然後使用該新映像創建Dockerfiles。我很好奇,看看是否有一種通用的方法來解決它,如果你正在運行的腳本不支持無人蔘與安裝... –

回答

6

您可以嘗試使用expect或類似的工具。

最簡單的配置方法是使用autoexpect工具,該工具可讓您交互式運行命令併爲您創建期望腳本。

我無法得到rvmsudo的東西工作(我沒有使用它,並不想花太多時間),所以我決定使用vi來代替。首先運行autoexpect

$ autoexpect vi test 

這將打開vi,您可以創建或編輯該文件並保存它。退出vi後,您會看到您的文件test以及期望腳本script.exp

然後您可以刪除測試文件並執行script.exp。它將使用相同的步驟重新創建相同的文件。

autoexpect工具非常棒,但如果您需要對發生的事情有更多的控制權,您可能必須從頭開始創建腳本。例如。如果您不希望腳本使用準確的預期輸入。

+2

得愛情downvoters,誰不評論他回答什麼問題。祝賀你! – ivant