Không thể cài đặt các gói bên trong hình ảnh docker Ubuntu


289

Tôi đã cài đặt hình ảnh Ubuntu 14.04 trên docker. Sau đó, khi tôi cố gắng cài đặt các gói bên trong hình ảnh Ubuntu, tôi không thể xác định được lỗi gói:

apt-get install curl

Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package curl

Làm thế nào để khắc phục lỗi này?

Câu trả lời:


621

Đó là bởi vì không có bộ đệm gói trong hình ảnh, bạn cần chạy:

apt-get update

trước khi cài đặt các gói và nếu lệnh của bạn nằm trong Dockerfile, thì bạn sẽ cần:

apt-get -y install curl

Để triệt tiêu đầu ra tiêu chuẩn từ một lệnh sử dụng -qq. Ví dụ

apt-get -qq -y install curl

1
cái này hiệu quả với tôi, tôi có nên chạy -qq mọi lúc không
Nhà phát triển

6
-qq ngăn chặn đầu ra mà bạn thường không cần trong Dockerfile. Một mẹo hay khác - nói với debconf rằng nó đang hoạt động trong môi trường không tương tác: echo 'debconf debconf / frontend select Noninteractive' |
gỡ lỗi

7
Vì một số lý do, điều này không phù hợp với tôi, vẫn là thông báo "E: Không thể định vị gói .."
tblancog

"apt-get-update" và "apt-get install curl" hoạt động tốt!
Sindhu

Tôi thấy rằng lỗi này cũng xảy ra trong docker khi nó hết dung lượng. Tôi chạy docker image pruneđể giải phóng không gian và điều đó đã sửa nó cho tôi.
Jonathan Rys

123

Từ các tài liệu trong tháng Năm2017 2018 2019 2020

Luôn luôn kết hợp RUN apt-get updatevới apt-get installtrong cùng một RUNtuyên bố, ví dụ

RUN apt-get update && apt-get install -y package-bar

(...)

Sử dụng apt-get updatemột mình trong một RUNcâu lệnh gây ra các vấn đề bộ đệm và các apt-get installhướng dẫn tiếp theo không thành công.

(...)

Việc sử dụng RUN apt-get update && apt-get install -yđảm bảo Dockerfile của bạn cài đặt các phiên bản gói mới nhất mà không cần thêm mã hóa hoặc can thiệp thủ công. Kỹ thuật này được biết đến như là bộ nhớ cache của bộ đệm.



4

Hãy chắc chắn rằng bạn không có bất kỳ lỗi cú pháp nào trong Dockerfile vì điều này cũng có thể gây ra lỗi này. Một ví dụ đúng là:

RUN apt-get update \
    && apt-get -y install curl \
    another-package

Đó là sự kết hợp của việc sửa lỗi cú pháp và thêm apt-get updategiải quyết vấn đề cho tôi.


1

Tôi thấy rằng việc gắn một âm lượng cục bộ trên / tmp có thể gây ra sự cố về quyền khi "apt-get update" chạy, điều này ngăn không cho bộ đệm gói được điền. Hy vọng rằng, đây không phải là điều mà hầu hết mọi người làm, nhưng nó là thứ khác để tìm nếu bạn thấy vấn đề này.


-3

Bạn cần cập nhật danh sách gói trong Ubuntu của mình:

$ sudo apt-get update
$ sudo apt-get install <package_name>
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.