Tránh tương tác của người dùng với tzdata khi cài đặt certbot trong thùng chứa docker


107

Tôi muốn cài đặt certbot trong môi trường docker với hình ảnh Ubuntu 16.04:

Ví dụ:

docker run -it ubuntu:16.04 /bin/bash

Khi tôi ở trong container, cách đơn giản nhất để cài đặt certbot không hoạt động vì nó yêu cầu sự can thiệp của người dùng:

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

Vấn đề là tzdata, dừng lại với hộp thoại tương tác này:

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: 

Thật kỳ lạ, nó hoạt động khi tôi cài đặt tzdatatrước khi thêm 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

Câu hỏi:

  • Tại sao làm cho nó một sự khác biệt cho dù tôi cài đặt tzdatatrước hoặc sau khi thêm ppa?
  • Có cách tiếp cận nào tốt hơn để tránh hộp thoại tương tác khi cài đặt certbot không?

Không làm việc cho tôi, thật không may.
Nico Schlömer

Câu trả lời:


100

Để chạy dpkg(đằng sau các công cụ khác như Apt) mà không cần đối thoại tương tác, bạn có thể đặt một biến môi trường là

DEBIAN_FRONTEND=noninteractive

Ví dụ: bạn có thể đặt nó trong Dockerfile bằng ARG :

ARG DEBIAN_FRONTEND=noninteractive

4
Lưu ý: sudokhông vượt qua các biến môi trường trong hầu hết các trường hợp, vì vậy sudo DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdatahoạt động nhưng DEBIAN_FRONTEND=noninteractive sudo apt-get install -y tzdatakhông.
Brendan Long

30
Đối với dockerfiles, hãy thêm cái này: ENV DEBIAN_FRONTEND = không tương tác
jersey bean

1
Tôi đã gặp trường hợp điều này không hoạt động trên Ubuntu 18.04. Nhưng câu trả lời dưới đây đã sửa nó trên Ubuntu 18.04.
tmanthey

28

Trên Ubuntu 18.04 tôi đã làm Dockerfile đó:

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

Dường như không tạo ra sự khác biệt cho tôi khi tôi thử US / Denver. Có lẽ tôi có thông tin tz sai.
lời giới thiệu


13

TL & DR: Trong DockerFile của bạn

ENV DEBIAN_FRONTEND=noninteractive 

Lý do:

Một số Trình cài đặt giúp 'cài đặt' dễ dàng hơn bằng cách có một giao diện đẹp. Mặc dù điều này thật tuyệt khi bạn có cài đặt thủ công, nhưng điều này trở thành một vấn đề trong quá trình cài đặt tự động.

Bạn có thể vượt qua cài đặt tương tác bằng cách đặt các mục sau trong chuỗi môi trường của bạn.

Chúc mừng



Đã đồng ý; Làm thay đổi. tới Gợi ý
FlyingV

4

Bạn có thể đặt DEBIAN_FRONTEND=noninteractivetrước lệnh của mình để tránh ENV DEBIAN_FRONTEND=noninteractiveảnh hưởng đến các lệnh sau hoặc ảnh con:

RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
        tzdata \
    && rm -rf /var/lib/apt/lists/*
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.