Não é possível instalar pacotes dentro da imagem do docker Ubuntu

289

Eu instalei a imagem do Ubuntu 14.04 no docker. Depois disso, quando tento instalar pacotes dentro da imagem do ubuntu, não consigo localizar o erro do pacote:

apt-get install curl

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

Como corrigir este erro?

Desenvolvedor
fonte

Respostas:

621

É porque não há cache de pacote na imagem, você precisa executar:

apt-get update

antes de instalar pacotes, e se seu comando estiver em um Dockerfile, você precisará:

apt-get -y install curl

Para suprimir a saída padrão de um comando, use -qq. Por exemplo

apt-get -qq -y install curl
ISanych
fonte
1
Isso funciona para mim, eu deveria correr -qq para todos os tempos
desenvolvedor
6
-qq suprime a saída que você normalmente não precisa no Dockerfile. Outro truque interessante - diga ao debconf que ele está funcionando em um ambiente não interativo: echo 'debconf debconf / frontend select Noninteractive' | debconf-set-selections
ISanych
7
Por alguma razão isso não funciona para mim, continua a mesma "E: Não foi possível localizar pacote .." mensagem
tblancog
"apt-get-update" e "apt-get install curl" funcionaram bem!
Sindhu #
Descobri que esse erro também ocorre no docker quando o espaço está acabando. Corri docker image prunepara liberar espaço e isso foi corrigido para mim.
Jonathan Rys
123

Dos documentos de maio2017 2018 2019 2020

Sempre combine RUN apt-get updatecom apt-get installa mesma RUNinstrução, por exemplo

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

(...)

Usar apt-get updatesozinho em uma RUNinstrução causa problemas de cache e as apt-get installinstruções subseqüentes falham.

(...)

O uso RUN apt-get update && apt-get install -ygarante que o Dockerfile instale as versões mais recentes dos pacotes sem necessidade de codificação ou intervenção manual. Essa técnica é conhecida como "impedimento de cache".

creimers
fonte
14

Adicione o seguinte comando no Dockerfile:

RUN apt-get update
Gourav Singla
fonte
4

Verifique se você não possui erros de sintaxe no seu Dockerfile, pois isso também pode causar esse erro. Um exemplo correto é:

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

Foi uma combinação de corrigir um erro de sintaxe e adicionar o apt-get updateque resolveu o problema para mim.

Connor
fonte
1

Eu descobri que montar um volume local sobre / tmp pode causar problemas de permissão quando a "apt-get update" é executada, o que impede que o cache do pacote seja preenchido. Felizmente, isso não é algo que a maioria das pessoas faz, mas é outra coisa a procurar se você vir esse problema.

Groboclown
fonte
-3

Você precisa atualizar a lista de pacotes no seu Ubuntu:

$ sudo apt-get update
$ sudo apt-get install <package_name>
touro sem nome
fonte