Tidak dapat menginstal paket di dalam Docker image Ubuntu


289

Saya menginstal Ubuntu 14,04 gambar di buruh pelabuhan. Setelah itu, ketika saya mencoba menginstal paket di dalam gambar ubuntu, saya tidak dapat menemukan kesalahan paket:

apt-get install curl

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

Bagaimana cara memperbaiki kesalahan ini?

Jawaban:


621

Karena tidak ada cache paket dalam gambar, Anda perlu menjalankan:

apt-get update

sebelum menginstal paket, dan jika perintah Anda ada di Dockerfile, Anda perlu:

apt-get -y install curl

Untuk menekan output standar dari penggunaan perintah -qq. Misalnya

apt-get -qq -y install curl

1
ini bekerja untuk saya, haruskah saya menjalankan -qq untuk semua waktu
Pengembang

6
-qq menekan output yang biasanya tidak Anda butuhkan di Dockerfile. Trik bagus lainnya - beri tahu debconf bahwa ia berfungsi di lingkungan non-interaktif: echo 'debconf debconf / frontend pilih Noninteractive' | debconf-set-
choices

7
Untuk beberapa alasan ini tidak berfungsi untuk saya, masih sama "E: Tidak dapat menemukan paket .." pesan
tblancog

"apt-get-update" dan "apt-get install curl" bekerja dengan baik!
Sindhu

Saya menemukan bahwa kesalahan ini juga terjadi di buruh pelabuhan ketika kehabisan ruang. Saya berlari docker image pruneuntuk membebaskan ruang dan itu diperbaiki untuk saya.
Jonathan Rys

123

Dari dokumen pada bulan Mei2017 2018 2019 2020

Selalu gabungkan RUN apt-get updatedengan apt-get installdalam RUNpernyataan yang sama , misalnya

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

(...)

Menggunakan apt-get updatesendirian dalam RUNpernyataan menyebabkan masalah caching dan apt-get installinstruksi selanjutnya gagal.

(...)

Menggunakan RUN apt-get update && apt-get install -ymemastikan Dockerfile Anda menginstal versi paket terbaru tanpa pengkodean lebih lanjut atau intervensi manual. Teknik ini dikenal sebagai "penghilang cache".



4

Pastikan Anda tidak memiliki kesalahan sintaks di Dockerfile Anda karena ini dapat menyebabkan kesalahan ini juga. Contoh yang benar adalah:

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

Itu kombinasi memperbaiki kesalahan sintaks dan menambahkan apt-get updateyang memecahkan masalah bagi saya.


1

Saya menemukan bahwa pemasangan volume lokal lebih dari / tmp dapat menyebabkan masalah izin ketika "apt-get update" berjalan, yang mencegah cache paket tidak terisi. Mudah-mudahan, ini bukan sesuatu yang dilakukan kebanyakan orang, tetapi itu sesuatu yang lain untuk dicari jika Anda melihat masalah ini.


-3

Anda perlu memperbarui daftar paket di Ubuntu Anda:

$ sudo apt-get update
$ sudo apt-get install <package_name>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.