當前位置: 首頁>>技術教程>>正文


ubuntu – 在docker下安裝時可以回答對話框問題嗎?

, , ,

問題描述

使用apt-get安裝某些軟件包時,是否可以以某種方式回答作為對話框出現的問題?

例如,我正在嘗試使用以下命令設置包含mail-stack-delivery軟件包的容器:

FROM ubuntu

RUN apt-get install -y mail-stack-delivery

但是,在構建時,dockerfile會產生許多錯誤,這些錯誤包括:

debconf: unable to initialize frontend: Dialog
debconf: (TERM is not set, so the dialog frontend is not usable.)
debconf: falling back to frontend: Readline
debconf: unable to initialize frontend: Readline
debconf: (Can't locate Term/ReadLine.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .) at /usr/share/perl5/Debconf/FrontEnd/Readline.pm line 7, <> line 11.)
debconf: falling back to frontend: Teletype
dpkg-preconfigure: unable to re-open stdin: 

據我了解,我隻是無法響應對話框,但是是否可以通過某種方式提前傳遞參數來回答每個問題?我知道它隻是在更改某些配置,因此事後我可以這樣做,但是大概最好讓安裝腳本來執行此操作,以便正確設置所有內容。

最佳答案

請參閱此處的討論:https://github.com/docker/docker/issues/4032。簡而言之,不建議設置ENV DEBIAN_FRONTEND noninteractive,因為即使在運行諸如docker run -i -t ... bash之類的圖像時,它仍會保留在最終圖像中。因此,建議要麽省略DEBIAN_FRONTEND並保留警告,要麽為每個命令明確指定警告,例如RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -q package

幸運的是,新的ARG指令設置了僅在構建期間存在的變量,因此現在可以使用更優雅的解決方案,該解決方案在DockerFile中指定,但不會在最終圖像中持續存在:ARG DEBIAN_FRONTEND=noninteractive

次佳答案

您應該將DEBIAN_FRONTEND = noninteractive設置為envvar。在大多數情況下,這至少會成功實現,因此安裝不會出錯。

就像@Azdle提到的那樣,使用debconf-set-selections將允許您設置特定的項目。

第三種答案

和往常一樣,更多的搜索找到了答案。

答案是debconf-set-selections。手冊頁:http://manpages.ubuntu.com/manpages/oneiric/en/man1/debconf-set-selections.1.html

要查找可以設置的選項,請在已安裝軟件包的係統上使用debconf-get-selections。您需要為第二個命令安裝debconf-utils

第四種答案

這是可行的解決方案:

ARG DEBIAN_FRONTEND =非交互式

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/9510.html,未經允許,請勿轉載。