Почему эта команда apt-get работает в одном контексте, а не в другом?

Я пытаюсь добавить пакет plpython в мой докер-контейнер (запустив образ Ubunutu), используя следующую команду (RUN - это команда docker, которую можно игнорировать, если вы не знаете Docker):

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

Однако это дает следующую ошибку:

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

Однако, если я вставлю эту же команду в эту часть существующего Dockerfile (т.е. я добавлю строку postgresql-plpython-$PG_MAJOR=$PG_VERSION \, команда работает.

Я не очень разбираюсь в apt-get, поэтому кто-то может объяснить, почему пакет находится в контексте родительского Dockerfile, а не в моем Dockerfile? Что я могу сделать, чтобы найти посылку?

2 ответа

Dockerfile базового образа имеет следующую инструкцию:

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

Это очищает списки пакетов, загруженных apt-get update, Вот почему вы получаете ошибку. Чтобы решить эту проблему, выполните apt-get update снова в вашем Dockerfile.

Убедитесь, что вы связали свое обновление и установили команды. Смотрите официальные документы Docker по этому вопросу. Docker имеет различные проблемы с аннулированием уровня кэша, которые могут вызвать ошибки в противном случае.

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

Вы также можете отключить вывод установки и очистить подходящие кеши, чтобы минимизировать размер образа и кеша.

RUN apt-get update -qqy \
 && apt-get install -qqy \
 postgresql-plpython-$PG_MAJOR=$PG_VERSION \
 && rm -rf /var/lib/apt/lists/* /var/cache/apt/*
Другие вопросы по тегам