หลีกเลี่ยงการโต้ตอบกับผู้ใช้กับ tzdata เมื่อติดตั้ง certbot ในคอนเทนเนอร์นักเทียบท่า


107

ฉันต้องการติดตั้งcertbotในสภาพแวดล้อมของนักเทียบท่าที่มีรูป Ubuntu 16.04:

ตัวอย่างเช่น:

docker run -it ubuntu:16.04 /bin/bash

เมื่อฉันอยู่ในคอนเทนเนอร์วิธีที่ง่ายที่สุดในการติดตั้ง certbot ไม่ทำงานตามที่ผู้ใช้ต้องการ:

apt-get update && \
apt-get install -y software-properties-common && \
add-apt-repository -y -u ppa:certbot/certbot && \
apt-get install -y certbot

ปัญหาคือtzdataซึ่งหยุดด้วยกล่องโต้ตอบแบบโต้ตอบนี้:

Extracting templates from packages: 100%
Preconfiguring packages ...
Configuring tzdata
------------------

Please select the geographic area in which you live. Subsequent configuration
questions will narrow this down by presenting a list of cities, representing
the time zones in which they are located.

 1. Africa      4. Australia  7. Atlantic  10. Pacific  13. Etc
 2. America     5. Arctic     8. Europe    11. SystemV
 3. Antarctica  6. Asia       9. Indian    12. US
Geographic area: 

น่าแปลกที่มันทำงานเมื่อฉันติดตั้งtzdataก่อนเพิ่ม ppa:

apt-get update && \
apt-get install -y tzdata && \
apt-get install -y software-properties-common && \
add-apt-repository -y -u ppa:certbot/certbot && \
apt-get install -y certbot

คำถาม:

  • ทำไมมันถึงแตกต่างไม่ว่าฉันtzdataจะติดตั้งก่อนหรือหลังการเพิ่ม ppa
  • มีวิธีที่ดีกว่าในการหลีกเลี่ยงการโต้ตอบโต้ตอบเมื่อติดตั้ง certbot?

ไม่ทำงานสำหรับฉันโชคไม่ดี
Nico Schlömer

คำตอบ:


100

หากต้องการเรียกใช้dpkg(หลังเครื่องมืออื่น ๆ เช่น Apt) โดยไม่มีการโต้ตอบโต้ตอบคุณสามารถตั้งค่าตัวแปรสภาพแวดล้อมหนึ่งรายการเป็น

DEBIAN_FRONTEND=noninteractive

ตัวอย่างเช่นคุณสามารถตั้งค่าใน Dockerfile โดยใช้ARG :

ARG DEBIAN_FRONTEND=noninteractive

4
หมายเหตุ: sudoไม่ผ่านตัวแปรสภาพแวดล้อมผ่านในกรณีส่วนใหญ่sudo DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdataทำงานได้ แต่DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdataไม่
Brendan Long

30
สำหรับนักเทียบท่าให้เพิ่มสิ่งนี้: ENV DEBIAN_FRONTEND = แบบไม่โต้ตอบ
jersey bean

1
ฉันมีกรณีที่สิ่งนี้ไม่ได้ทำงานบน Ubuntu 18.04 แต่คำตอบด้านล่างไม่สามารถแก้ไขได้ใน Ubuntu 18.04
tmanthey

28

บน Ubuntu 18.04 ฉันทำ Dockerfile นั้น:

ENV TZ=Europe/Minsk
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt update && apt instal....

ดูเหมือนจะไม่สร้างความแตกต่างให้ฉันเมื่อฉันลอง US / Denver บางทีฉันมีข้อมูล tz ไม่ถูกต้อง
Wordsforthewise


13

TL&DR: ภายใน DockerFile ของคุณ

ENV DEBIAN_FRONTEND=noninteractive 

เหตุผล:

ตัวติดตั้งบางตัวทำให้ 'การติดตั้ง' ง่ายขึ้นด้วยการมีส่วนหน้าที่ดี แม้ว่าสิ่งนี้จะยอดเยี่ยมเมื่อคุณมีการติดตั้งด้วยตนเองสิ่งนี้จะกลายเป็นปัญหาระหว่างการติดตั้งอัตโนมัติ

คุณสามารถขี่การติดตั้งแบบโต้ตอบโดยวางสิ่งต่อไปนี้ในสตริงสภาพแวดล้อมของคุณ

ไชโย



ตกลงกัน; ทำการเปลี่ยนแปลง เป็น Suggestiong
FlyingV

4

คุณสามารถตั้งค่าDEBIAN_FRONTEND=noninteractiveก่อนที่คำสั่งของคุณเพื่อหลีกเลี่ยงENV DEBIAN_FRONTEND=noninteractiveผลกระทบต่อคำสั่งหลังจากหรือภาพเด็ก:

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
        tzdata \
    && rm -rf /var/lib/apt/lists/*
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.