Вопрос или проблема
Для совместимости мне нужно использовать этот старый образ, но даже после установки software-properties-common
ни одна из команд не найдена: apt-add-repository
или add-apt-repository
. Все, что я смог найти, это установить software-properties-common, но это тоже не помогло.
FROM ubuntu:precise
# Установите переменные окружения, чтобы избежать интерактивных запросов во время установки пакетов
ENV DEBIAN_FRONTEND=noninteractive
RUN sed -i 's/archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
# Обновите списки пакетов и установите основные пакеты
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y \
sudo \
curl \
vim \
wget \
git \
nano \
software-properties-common \
build-essential && \
rm -rf /var/lib/apt/lists/*
# По умолчанию запускайте оболочку, когда контейнер запускается
CMD ["/bin/bash"]
Случайно я увидел этот ответ через минуту после публикации моего вопроса: https://askubuntu.com/a/593437/909989 В основном для старых версий необходимо установить python-software-properties
.
Ответ или решение
Как исправить отсутствие команд add-apt-repository и apt-add-repository в контейнере Docker на основе Ubuntu Precise
Введение
При работе с устаревшими версиями образов Docker, такими как ubuntu:precise
(12.04.5), вы можете столкнуться с проблемами, связанными с установкой дополнительных репозиториев программного обеспечения. В данном случае команды add-apt-repository
и apt-add-repository
отсутствуют даже после установки software-properties-common
. В этом материале мы рассмотрим, как правильно решить данную проблему.
Конкретная проблема
В вашем случае вы указали, что после установки пакета software-properties-common
, команды для добавления репозиториев все еще недоступны. Вы правильно заметили, что для старых версий Ubuntu необходимо установить пакет python-software-properties
. Этот пакет обеспечивает необходимую функциональность для работы с различными репозиториями.
Решение
Чтобы решить проблему с отсутствием команд управления репозиториями в контейнере, вам необходимо внести изменения в ваш Dockerfile. Вот подробный пример, как это сделать:
FROM ubuntu:precise
# Установить переменные окружения для избежания интерактивного запроса при установке пакетов
ENV DEBIAN_FRONTEND=noninteractive
# Изменить источники на старые репозитории Ubuntu
RUN sed -i 's/archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
# Обновить список пакетов и установить основные пакеты
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y \
sudo \
curl \
vim \
wget \
git \
nano \
software-properties-common \
python-software-properties \ # Добавлено для поддержки add-apt-repository
build-essential && \
rm -rf /var/lib/apt/lists/*
# Запустить ад shell по умолчанию при запуске контейнера
CMD ["/bin/bash"]
Пояснения к изменениям
-
Установка
python-software-properties
: Этот пакет обеспечивает наличие командыadd-apt-repository
и необходим для работы, особенно в старых версиях Ubuntu, таких как Precise. -
Использование
old-releases.ubuntu.com
: Это необходимо для доступа к пакетам, поскольку основная поддержка старых версий Ubuntu была прекращена, и они были перемещены в архивы. -
Основные утилиты: При установке других utility (например,
sudo
,git
,curl
и т.д.) мы создаем более удобную среду для разработки и тестирования в контейнере.
Заключение
Использование устаревших версий Ubuntu в Docker может вызвать определённые трудности, особенно в вопросах установки пакетов и репозиториев. Однако, следуя предложенному решению и установив пакет python-software-properties
, вы сможете исправить недоступность команд add-apt-repository
и apt-add-repository
. Это позволит вам успешно продолжить использование необходимых вам ресурсов в вашем контейнере.
Таким образом, с помощью обновленного Dockerfile вы сможете эффективно управлять репозиториями в устаревшем окружении, что является важным аспектом для приложений, зависящих от старого ПО.