Docker: Gặp sự cố khi cài đặt apt-utils


109

Tôi cố gắng để cài đặt apt-utilstrên Docker bởi vì khi tôi chỉ làm apt-get update, tôi đã nhận được báo lỗi: debconf: delaying package configuration, since apt-utils is not installed. Vì vậy, tôi đã thêm một dòng để cài đặt apt-utils(cùng với curl):

RUN apt-get update && apt-get install -y apt-utils && apt-get install -y curl

Tuy nhiên, tôi vẫn nhận được lỗi đó khiến tôi tin rằng lệnh của tôi không hoạt động. Dưới đây là đầu ra của tôi khi tôi cố gắng xây dựng hình ảnh.

Step 5/12 : RUN apt-get update && apt-get install -y apt-utils && apt-get install -y curl
 ---> Running in 6e6565ff01bd
Get:1 http://security.debian.org jessie/updates InRelease [94.4 kB]
Ign http://deb.debian.org jessie InRelease
Get:2 http://deb.debian.org jessie-updates InRelease [145 kB]
Get:3 http://deb.debian.org jessie Release.gpg [2420 B]
Get:4 http://deb.debian.org jessie Release [148 kB]
Get:5 http://security.debian.org jessie/updates/main amd64 Packages [624 kB]
Get:6 http://deb.debian.org jessie-updates/main amd64 Packages [23.0 kB]
Get:7 http://deb.debian.org jessie/main amd64 Packages [9098 kB]
Fetched 10.1 MB in 6s (1541 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
The following extra packages will be installed:
  libapt-inst1.5
The following NEW packages will be installed:
  apt-utils libapt-inst1.5
0 upgraded, 2 newly installed, 0 to remove and 24 not upgraded.
Need to get 537 kB of archives.
After this operation, 1333 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian/ jessie/main libapt-inst1.5 amd64 1.0.9.8.4 [169 kB]
Get:2 http://deb.debian.org/debian/ jessie/main apt-utils amd64 1.0.9.8.4 [368 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 537 kB in 0s (557 kB/s)
Selecting previously unselected package libapt-inst1.5:amd64.
(Reading database ... 21676 files and directories currently installed.)
Preparing to unpack .../libapt-inst1.5_1.0.9.8.4_amd64.deb ...
Unpacking libapt-inst1.5:amd64 (1.0.9.8.4) ...
Selecting previously unselected package apt-utils.
Preparing to unpack .../apt-utils_1.0.9.8.4_amd64.deb ...
Unpacking apt-utils (1.0.9.8.4) ...
Setting up libapt-inst1.5:amd64 (1.0.9.8.4) ...
Setting up apt-utils (1.0.9.8.4) ...
Processing triggers for libc-bin (2.19-18+deb8u10) ...
Reading package lists...
Building dependency tree...
Reading state information...
curl is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 24 not upgraded.
Removing intermediate container 6e6565ff01bd
 ---> f65e29c6a6b9
Step 6/12 : RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | bash
 ---> Running in f5764ba56103
Detected operating system as debian/8.
Checking for curl...
Detected curl...
Checking for gpg...
Detected gpg...
Running apt-get update... done.
Installing debian-archive-keyring which is needed for installing
apt-transport-https on many Debian systems.
Installing apt-transport-https... done.
Installing /etc/apt/sources.list.d/github_git-lfs.list...done.
Importing packagecloud gpg key... done.
Running apt-get update... done.

The repository is setup! You can now install packages.
Removing intermediate container f5764ba56103
 ---> a4e64687ab73

Điều gì gây ra điều này và làm thế nào tôi có thể sửa chữa nó? Cảm ơn bạn!

Câu trả lời:


105

Đây thực tế không phải là một lỗi và có thể yên tâm bỏ qua nó. Tôi đã tạo một số lượng lớn các hình ảnh vùng chứa mà không bao giờ có apt-utils trên bất kỳ hình ảnh nào trong số đó và bất kể thông báo cảnh báo này là gì, tất cả các cài đặt gói đều diễn ra và hoạt động bình thường.

Dù sao, nếu bạn muốn có apt-utils - hãy cài đặt nó. Nó sẽ cung cấp cho bạn cảnh báo này một lần và sau đó nó sẽ biến mất cho các lần gọi apt-get trong tương lai (như bạn có thể thấy trong nhật ký của riêng mình, curlđã được cài đặt mà không có thông báo đó).

LƯU Ý nếu bạn cài đặt apt-utils, bạn sẽ nhận được các cảnh báo khác (vì bây giờ trình cài đặt có thể chạy cấu hình tương tác và sẽ thử điều đó và không thành công). Để loại bỏ những thứ đó và có các gói có cấu hình tương tác với mặc định của chúng, hãy chạy apt-get như thế nàyDEBIAN_FRONTEND=noninteractive apt-get install -y pkgs....


11
Bạn có thể cung cấp thông tin tham khảo cho nhận xét "thật an toàn khi bỏ qua nó"?
Zak

19
Đó là một cảnh báo đã biết, hãy xem ví dụ ở đây: github.com/phusion/baseimage-docker/issues/… (điều này xảy ra với các gói có cấu hình tương tác mà nó hỏi bạn câu hỏi - điều đó có nghĩa là cấu hình tương tác bị bỏ qua, nhưng bạn không 'thậm chí không cần điều đó và vẫn muốn các mặc định, bởi vì bạn đang chạy cài đặt tự động).
Leo K

Nó không phải lúc nào cũng là một cảnh báo có thể bỏ qua, nó phụ thuộc vào gói cụ thể mà bạn đang cài đặt. Đôi khi cấu hình là cần thiết và bạn sẽ phải thực hiện cài đặt tương tác hoặc tìm một số cách khác để cung cấp cho nó cấu hình cần thiết.
Ken Williams

44

Sau khi tìm kiếm trên Internet, tôi đã tìm thấy một số lựa chọn thay thế đáng được đề cập, thay vì mỗi lần đặt DEBIAN_FRONTEND=noninteractivetrướcapt-get install -y {your-pkgs} :

Phương án 1: ARG DEBIAN_FRONTEND = noninteractive

Lệnh ARG xác định một biến mà người dùng có thể chuyển vào lúc xây dựng cho trình tạo bằng lệnh xây dựng docker bằng cách sử dụng cờ --build-arg =. (Tham khảo: [ 6 ])

Đặc điểm giải pháp:

  • ARG chỉ thị chỉ được đặt trong quá trình xây dựng
  • Tùy chọn 'noninteractive' được đặt làm giá trị mặc định chỉ cho thời gian xây dựng.
  • Vì nó là một đối số, nó có thể được thay đổi bằng cách chuyển một giá trị khác cho đối số này với ví dụ: docker build --build-arg DEBIAN_FRONTEND=newt

Thí dụ:

ARG DEBIAN_FRONTEND=noninteractive
...
RUN apt-get -yq install {your-pkgs}

Phương án 2: Di chuyển

Đó là giải pháp từ Leo K.

Đặc điểm giải pháp:

  • Nó có thể được đặt ở nơi cần thiết. Vì vậy, một giải pháp tốt.
  • Nó có thể được đặt ở một giá trị khác trong một lệnh cụ thể, vì vậy nó không được đặt toàn cục.
  • Phạm vi là RUNvà sẽ không ảnh hưởng đến các chỉ thị khác.

Thí dụ:

RUN DEBIAN_FRONTEND=noninteractive apt-get -yq install {your-pkgs}

Phương án 3: ENV DEBIAN_FRONTEND = noninteractive

Cài đặt ENV DEBIAN_FRONTEND noninteractivecũng sẽ là một giải pháp thay thế nhưng nó rất không được khuyến khích.

Một cách khác sẽ là đặt ở vị trí xin và không đặt nó ở cuối Dockerfile.

Đặc điểm giải pháp:

  • ENV chỉ thị sẽ tồn tại biến môi trường sau khi xây dựng (không được khuyến nghị), hơn nữa
  • Nó có thể dễ xảy ra lỗi nếu bạn quên đặt nó trở lại giá trị mặc định.
  • Bởi vì nó được đặt với ENV, nó sẽ được kế thừa bởi tất cả các hình ảnh và vùng chứa được xây dựng từ hình ảnh, thay đổi hành vi của chúng một cách hiệu quả. (Như đã đề cập trong [ 1 ]) Những người sử dụng những hình ảnh đó gặp phải vấn đề khi cài đặt phần mềm tương tác, vì trình cài đặt không hiển thị bất kỳ hộp thoại nào.
  • Giao diện người dùng mặc định là DEBIAN_FRONTEND=newt(xem [ 2 ], vì vậy nó phải được đặt ở cuối tệp.

Thí dụ:

# Set for all apt-get install, must be at the very beginning of the Dockerfile.
ENV DEBIAN_FRONTEND noninteractive
...
# Non-interactive modes get set back.
ENV DEBIAN_FRONTEND newt

Phương án 4: RUN export DEBIAN_FRONTEND = noninteractive

Đặc điểm giải pháp:

  • Khá giống với phương án 2
  • Bằng cách phân tách, sự gắn kết đang gặp phải vấn đề: tại sao lại có sự xuất của biến này và biến nó thuộc về (apt-get).
  • Phạm vi là RUNvà sẽ không ảnh hưởng đến các chỉ thị khác.

Thí dụ:

# Set the frontend and then install your package
RUN export DEBIAN_FRONTEND=noninteractive && \
    ...
    apt-get -yq install {your-pkgs} && \
    ...

Thêm để đọc (tài liệu tham khảo)


2
Tôi đã sử dụng "Phương pháp thay thế 2: Đang di chuyển": rất sạch sẽ và tiện lợi, tôi không còn cảnh báo khó hiểu nữa
herve-guerin

Tôi chọn Phương án 1 và vẫn nhận được cảnh báo. Dockerfile của tôi bắt đầu bằng FROM node:10.16.2 WORKDIR /usr/src/app ARG DEBIAN_FRONTEND=noninteractivevà tôi chạydocker build --no-cache -t node-10-16-2-plus-chrome .
Marecky
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.