Я получаю ошибку 'apt-get upgrade', ошибка команды при сборке контейнера Python3 .6-buster - PullRequest
2 голосов
/ 07 апреля 2020

Вчера не было никаких проблем, когда я строил свое приложение Python Flask на python: образ 3,6-buster. Но сегодня я получаю эту ошибку.

Calculating upgrade...
The following packages will be upgraded: libgnutls-dane0 libgnutls-openssl27 libgnutls28-dev libgnutls30 libgnutlsxx28
5 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 2859 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] Abort.
ERROR: Service 'gateway' failed to build: The command '/bin/sh -c apt-get upgrade' returned a non-zero code: 1

Мой Dockerfile:

FROM python:3.6-buster
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
RUN echo $TZ > /etc/timezone
RUN apt-get update
RUN apt-get upgrade
RUN apt-get -y install gcc musl-dev libffi-dev
COPY requirements.txt requirements.txt
RUN python3 -m pip install -r requirements.txt
COPY . /application
WORKDIR /application
EXPOSE 7000

Я не смог найти ни одного связанного вопроса. Я гость это о новом обновлении, но я не знаю, на самом деле. Есть какой-нибудь совет или решение для этой проблемы?

1 Ответ

2 голосов
/ 07 апреля 2020

Я полагаю, что apt ожидает ввода данных пользователем, чтобы подтвердить обновление. Строитель Docker не может справиться с этими интерактивными диалогами без хакерских решений. Таким образом, это не удается.

Самое простое решение - добавить флаг -y к вашим командам, как вы делаете это в команде установки.

FROM python:3.6-buster
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
RUN echo $TZ > /etc/timezone
RUN apt-get update
RUN apt-get upgrade -y
RUN apt-get -y install gcc musl-dev libffi-dev
COPY requirements.txt requirements.txt
RUN python3 -m pip install -r requirements.txt
COPY . /application
WORKDIR /application
EXPOSE 7000

Однако ... вам действительно нужно обновить ваши существующие пакеты? Это может быть не требуется в вашем случае. Кроме того, я могу порекомендовать вам проверить Docker Best Practices для написания операторов, включающих apt команды. Для того чтобы размер вашего изображения был небольшим, вы должны рассмотреть возможность сжатия этих команд в одном операторе RUN. Кроме того, вы должны впоследствии удалить кэш apt, чтобы минимизировать изменения между вашими двумя слоями:

FROM python:3.6-buster
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
RUN echo $TZ > /etc/timezone
RUN apt-get update \
&&  apt-get -y install gcc musl-dev libffi-dev \
&&  rm -rf /var/lib/apt/lists/*
COPY requirements.txt requirements.txt
RUN python3 -m pip install -r requirements.txt
COPY . /application
WORKDIR /application
EXPOSE 7000
...