Я пытаюсь добавить пакет 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? можно сделать, чтобы найти посылку?
Dockerfile базового изображения имеет следующие инструкции:
rm -rf /var/lib/apt/lists/*
Это очищает списки пакета, загруженные apt-get update
. Вот почему Вы получаете ошибку. Для решения этой проблемы выполнитесь apt-get update
снова в Dockerfile.
Удостоверьтесь, что Вы связываете свое обновление и устанавливаете команды. Посмотрите чиновника документы Докера по вопросу. У докера есть различные проблемы с аннулированием слоя кэша, которое может бросить ошибки иначе.
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/*