我对网络和服务器管理还很陌生,因此提前感谢您的耐心。
目前我正在学习如何在 AWS 的 Cloud9 上构建 docker 镜像。
我所遵循的教程来自 AWS 自己,名为 MythicalMysfits,旨在引导新用户了解 AWS 上用于构建现代 Web 应用程序的主要工具。
我目前处于第二步,构建一个动态网站:
当我运行以下命令时:
docker build . -t REPLACE_ME_AWS_ACCOUNT_ID.dkr.ecr.REPLACE_ME_REGION.amazonaws.com/mythicalmysfits/service:latest
我当然用我的账户ID和地区替换了必要的两个部分。
它提示运行另一个名为“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 在 Cloud9 的 IDE 中不起作用,因此我设法使用 sudo yum 手动安装了 python 包。我花了两天多的时间来弄清楚。我也按照教程建议位于正确的目录中。
你知道为什么“Dockerfile”会出现错误吗?
再次感谢您抽出时间。
答案1
我也在遵循相同的教程。我遇到了和你一样的问题。
我通过以下方式解决了它:
- 使用python3-pip代替python-pi
- 使用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"]
答案2
我将 Dockerfile 的第一行从
FROM ubuntu:latest
到
FROM ubuntu:18.04
但我不能说这是否会产生任何成本影响。
答案3
编写 dockerfile 的一般规则是:您能否使用命令行手动按顺序执行每个 RUN 行的内容?这可能会为您提供有关故障位置的宝贵调试信息。
看来 apt-get 确实可以工作,并且 python-pip 应该可以在 Debian/Ubuntu 存储库中使用。
Docker 有时会以意想不到的方式处理构建缓存,尤其是在修改 dockerfile 后,而你的构建缓存失败了后缓存的操作。消除这种可能性的最安全方法是通过运行以下命令删除缓存:
docker images
docker rmi <image>
并删除最近的构建尝试图像以消除缓存