Nie można zainstalować pakietów w obrazie dokującym Ubuntu

289

Zainstalowałem obraz Ubuntu 14.04 w oknie dokowanym. Po tym, gdy próbuję zainstalować pakiety w obrazie ubuntu, nie mogę zlokalizować błędu pakietu:

apt-get install curl

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

Jak naprawić ten błąd?

Deweloper
źródło

Odpowiedzi:

621

Ponieważ obraz nie zawiera pamięci podręcznej pakietów, musisz uruchomić:

apt-get update

przed instalacją pakietów, a jeśli twoje polecenie znajduje się w pliku Docker, będziesz potrzebować:

apt-get -y install curl

Aby wyłączyć standardowe wyjście z polecenia, użyj -qq. Na przykład

apt-get -qq -y install curl
ISanych
źródło
1
to działa dla mnie, czy powinienem uruchamiać -qq przez cały czas
Developer
6
-qq pomija dane wyjściowe, których zwykle nie potrzebujesz w Dockerfile. Kolejna fajna sztuczka - powiedz debconfowi, że działa w środowisku nieinteraktywnym: echo „debconf debconf / frontend select Noninteractive” | debconf-set-selections
ISanych
7
Z jakiegoś powodu to nie działa dla mnie, wciąż ten sam komunikat „E: Nie można znaleźć pakietu ..”
tblancog 28.08.16
„apt-get-update” i „apt-get install curl” działały dobrze!
Sindhu
Odkryłem, że ten błąd występuje również w oknie dokowanym, gdy zabraknie miejsca. Pobiegłem, docker image pruneżeby zwolnić miejsce i to mnie naprawiło.
Jonathan Rys
123

Z dokumentów w maju2017 r 2018 r 2019 2020

Zawsze łącz na przykład RUN apt-get updatez apt-get installtym samym RUNwyrażeniem

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

(...)

Za pomocą apt-get update samego w RUNinstrukcji powoduje problemy z buforowaniem, a kolejne apt-get installinstrukcje kończą się niepowodzeniem.

(...)

Używanie RUN apt-get update && apt-get install -yzapewnia, że ​​Twój plik Docker instaluje najnowsze wersje pakietów bez dalszego kodowania lub ręcznej interwencji. Ta technika jest znana jako „pomijanie pamięci podręcznej”.

creimers
źródło
14

Dodaj następujące polecenie w Dockerfile:

RUN apt-get update
Gourav Singla
źródło
4

Upewnij się, że nie ma żadnych błędów składniowych w pliku Docker, ponieważ może to również powodować ten błąd. Prawidłowy przykład to:

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

To była kombinacja naprawienia błędu składniowego i dodania, apt-get updateco rozwiązało problem.

Connor
źródło
1

Odkryłem, że podłączenie woluminu lokalnego przez / tmp może powodować problemy z uprawnieniami podczas uruchamiania „aktualizacji apt-get”, co zapobiega zapełnianiu pamięci podręcznej pakietów. Mamy nadzieję, że nie jest to coś, co robi większość ludzi, ale jest coś innego, czego można się spodziewać, jeśli zobaczysz ten problem.

Groboclown
źródło
-3

Musisz zaktualizować listę pakietów w systemie Ubuntu:

$ sudo apt-get update
$ sudo apt-get install <package_name>
nienazwany byk
źródło