Por que este comando apt-get funciona em um contexto, mas não em outro?

1

Estou tentando adicionar o pacote plpython ao meu contêiner docker (executando uma imagem Ubunutu) usando o seguinte comando (RUN sendo o comando docker que você pode ignorar se não conhecer o Docker):

RUN apt-get install -y postgresql-plpython-$PG_MAJOR=$PG_VERSION

No entanto, isso gera o seguinte erro:

E: Unable to locate package postgresql-plpython-9.4
E: Couldn't find any package by regex 'postgresql-plpython-9.4'
INFO[0005] The command [/bin/sh -c apt-get install -y postgresql-plpython-$PG_MA
JOR=$PG_VERSION] returned a non-zero code: 100

No entanto, se eu inserir este mesmo comando em esta parte de um Dockerfile existente (ou seja, eu adiciono a linha postgresql-plpython-$PG_MAJOR=$PG_VERSION \ , o comando funciona.

Eu não sei muito sobre o apt-get, então alguém pode explicar porque o pacote é encontrado no contexto do Dockerfile pai, mas não no meu Dockerfile? O que posso fazer para que o pacote seja encontrado?

    
por Miguel 14.04.2015 / 17:22

2 respostas

5

O Dockerfile da imagem de base tem a seguinte instrução:

rm -rf /var/lib/apt/lists/*

Isso limpa as listas de pacotes baixadas por apt-get update . É por isso que você recebe o erro. Para resolver este problema, execute apt-get update novamente em seu Dockerfile.

    
por Andreas Veithen 15.04.2015 / 11:36
0

Certifique-se de agrupar sua atualização e instalar comandos. Consulte os documentos do Docker oficiais oficiais sobre o assunto. O Docker tem vários problemas com a invalidação da camada de cache que podem gerar erros de outra forma.

RUN apt-get update && apt-get install postgresql-plpython-$PG_MAJOR=$PG_VERSION

Você também pode silenciar a saída da instalação e limpar os caches apt para minimizar a imagem e o tamanho do cache.

RUN apt-get update -qqy \
 && apt-get install -qqy \
 postgresql-plpython-$PG_MAJOR=$PG_VERSION \
 && rm -rf /var/lib/apt/lists/* /var/cache/apt/*
    
por Twisted Pear 16.08.2017 / 21:49