Почему эта команда 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/*