Назад | Перейти на главную страницу

Ошибка построения образа Docker в AWS Cloud9

Я новичок в управлении сетями и серверами, поэтому заранее благодарим вас за терпение.

В настоящее время я изучаю, как создать образ докера на AWS Cloud9.

Учебное пособие, которому я следую, принадлежит AWS и называется MythicalMysfits. Оно предназначено для ознакомления нового пользователя с основными инструментами, используемыми на AWS для создания современного веб-приложения.

Сейчас я на шаге 2, создаю динамический веб-сайт:

https://aws.amazon.com/getting-started/hands-on/build-modern-app-fargate-lambda-dynamodb-python/module-two/

Когда я запускаю следующую команду:

docker build . -t REPLACE_ME_AWS_ACCOUNT_ID.dkr.ecr.REPLACE_ME_REGION.amazonaws.com/mythicalmysfits/service:latest

Я, конечно, заменяю две необходимые части своим идентификатором учетной записи и регионом.

Он предлагает запустить другой файл с именем «Dockerfile», содержащий следующие команды:

FROM ubuntu:latest
RUN echo Updating existing packages, installing and upgrading python and pip.
RUN apt-get update -y
RUN apt-get install -y python-pip python-dev build-essential
RUN pip install --upgrade pip
RUN echo Copying the Mythical Mysfits Flask service into a service directory.
COPY ./service /MythicalMysfitsService
WORKDIR /MythicalMysfitsService
RUN echo Installing Python packages listed in requirements.txt
RUN pip install -r ./requirements.txt
RUN echo Starting python and starting the Flask service...
ENTRYPOINT ["python"]
CMD ["mythicalMysfitsService.py"]

На этом этапе код начинает выполняться, но не работает:

Sending build context to Docker daemon  14.85kB
Step 1/13 : FROM ubuntu:latest
 ---> 1d622ef86b13
Step 2/13 : RUN echo Updating existing packages, installing and upgrading python and pip.
 ---> Using cache
 ---> d5aa972842ca
Step 3/13 : RUN apt-get update -y
 ---> Using cache
 ---> 56374a45d258
Step 4/13 : RUN apt-get install -y python-pip python-dev build-essential
 ---> Running in 3ce71d802d94
Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package python-pip
The command '/bin/sh -c apt-get install -y python-pip python-dev build-essential' returned a non-zero code: 100

Я понимаю, что вне этого документа apt-get не работает в IDE Cloud9, поэтому мне удалось установить пакеты python вручную с помощью sudo yum. Я потратил несколько часов на два дня, пытаясь понять это. Я также нахожусь в правильном каталоге, как советует учебник.

Вы хоть представляете, почему "Dockerfile" плохо себя ведет?

Еще раз благодарю вас за ваше время.

Я тоже следую тому же руководству. У меня была такая же проблема, как и у вас.

Я решил это:

  • С помощью python3-pip вместо того питон-пи
  • С помощью pip3 вместо того пип

В файле Docker вам просто нужно изменить следующие строки:

  • Заменить строку 4 на:

    RUN apt-get install -y python3-pip python-dev build-essential

  • Заменить строку 5 на:

    RUN pip3 install --upgrade pip

  • Заменить строку 10 на:

    RUN pip3 install -r ./requirements.txt

  • Заменить строку 12 на:

    ENTRYPOINT ["python3"]

Я изменил первую строку Dockerfile с

FROM ubuntu:latest

к

FROM ubuntu:18.04

Однако я не могу сказать, будет ли это иметь какие-либо финансовые последствия.

В качестве общего правила при написании файлов докеров: можете ли вы последовательно выполнить содержимое каждой строки RUN вручную с помощью командной строки? Это может дать вам ценную отладочную информацию о том, где находится сбой.

Похоже, что apt-get действительно работает, и python-pip должен быть доступен в репозиториях Debian / Ubuntu.

Docker иногда ведет себя неожиданным образом с кешем сборки, особенно после изменения файла dockerfile, а у вас происходит сбой после кэшированные операции. Самый безопасный способ устранить эту возможность - удалить кеш, запустив:

docker images
docker rmi <image>

и удалите образ недавней попытки сборки, чтобы удалить кеш