【问题标题】:Unable to locate package python无法找到包 python
【发布时间】:2020-01-07 07:04:52
【问题描述】:

我正在尝试在 ubuntu 映像上运行以下 Dockerfile 内容。

FROM ubuntu
RUN apt-get update
RUN apt-get install -y python
RUN apt-get install -y python-pip
RUN pip install flask
COPY app.py /opt/app.py
ENTRYPOINT FLASK_APP=/opt/app.py flask run --host=0.0.0.0

但我在第 3 层遇到以下错误。

Step 1/7 : FROM ubuntu
---> 549b9b86cb8d
Step 2/7 : RUN apt-get update
---> Using cache
---> 78d87d6d9188
Step 3/7 : RUN apt-get install -y python
---> Running in a256128fde51
Reading package lists...
Building dependency tree...
Reading state information...
E: Unable to locate package python

虽然我单独运行以下命令

sudo apt-get install -y python

安装成功。

谁能帮帮我。

注意:我在组织代理后面工作。

【问题讨论】:

  • 尝试在没有缓存的情况下构建--no-cache
  • 为什么需要从 ubuntu 构建? docker hub.docker.com/_/python 已经有 Python 镜像了

标签: docker ubuntu dockerfile


【解决方案1】:
Step 2/7 : RUN apt-get update
    ---> Using cache

您应该在同一个 RUN 指令中运行 apt-get updateapt-get install,如下所示

 RUN apt-get update && apt-get install -y python

Dockerfile 中的每条指令都会在镜像中创建单独的层,并缓存这些层。所以apt-get update 可能只使用缓存,甚至不运行。这也发生在你的案例中。您可以在日志中看到 ---> Using cache 行。您可以使用docker build --no-cache 让 docker 在不使用缓存的情况下重建所有层。

您可以改用python:3 官方镜像作为基础镜像来运行您的python 应用程序。

【讨论】:

    【解决方案2】:

    在 python 安装教程中有一个包名为 python3.x 用于 Debian。 我认为这是你的情况。我在 Docker 中测试过,这是正确的配置

    看起来像

    来自 ubuntu:20.04

    运行apt-get update && apt-get -y install python3.8 python3.8-dev

    【讨论】:

      【解决方案3】:

      我觉得你应该使用 Python3 的镜像而不是使用 ubuntu 然后安装它。

      FROM python:3
      
      RUN apt-get update && apt-get install -y python3-pip #You don't need to install pip, because it is already there in python's image
      
      RUN pip install -r requirements.txt
      
      COPY . /usr/src/apps #This you can change
      
      WORKDIR /usr/src/apps/ #this as well
      
      CMD ["python","app.py"]
      

      【讨论】:

        【解决方案4】:

        尝试以下方法,它对我有用

        apt-get install python3-pip
        

        然后安装烧瓶你将不得不使用

        pip3 install flask
        

        【讨论】: