【问题标题】:The command '/bin/sh -c pip install --upgrade pip && pip install requests' returned a non-zero code: 127命令“/bin/sh -c pip install --upgrade pip && pip install requests”返回非零代码:127
【发布时间】:2020-07-09 13:25:28
【问题描述】:

我在 docker 容器中安装请求以在 python 脚本中使用它。这是我的 docker 文件。

# stage1 as builder
FROM node:10-alpine as builder
FROM python:3.7
FROM nginx:alpine

RUN pip install --upgrade pip && \
    pip install requests

WORKDIR /opt/
ADD init.py /opt/
RUN python init.py
## Remove default nginx index page
RUN rm -rf /usr/share/nginx/html/*

WORKDIR /opt/app-ui
# copy the package.json to install dependencies
COPY agentform/dist/agentform/* /usr/share/nginx/html/


EXPOSE 4200 80

ENTRYPOINT ["nginx", "-g", "daemon off;"]

docker-compose build 显示以下错误。

Step 4/12 : RUN pip install --upgrade pip &&     pip install requests
 ---> Running in e7ad71640bb3
/bin/sh: pip: not found
ERROR: Service 'web' failed to build: The command '/bin/sh -c pip install --upgrade pip &&     pip install requests' returned a non-zero code: 127

【问题讨论】:

  • RUN python3 -m pip install requests 怎么样?如果快捷方式未知...
  • here
  • 你也可以试试pip3 install ...
  • 每个FROM 行都会导致Docker 基本上重新开始;您正在尝试在未安装任何 Python 的 nginx 映像中运行 pip

标签: python docker pip


【解决方案1】:

根据文档:

对于多阶段构建,您可以在 Dockerfile 中使用多个 FROM 语句。每个 FROM 指令都可以使用不同的基础,并且它们中的每一个都开始构建的新阶段。您可以选择性地将工件从一个阶段复制到另一个阶段,从而在最终图像中留下您不想要的一切。为了展示它是如何工作的,让我们调整上一节中的 Dockerfile 以使用多阶段构建。 https://docs.docker.com/develop/develop-images/multistage-build/

所以,最终图像中不存在 pip,因为您在获取 python 后得到 FROM nginx:alpine

我认为最好的解决方案是在上次 FROM 之前进行 pip install,并按照此处的建议进行操作:https://pythonspeed.com/articles/multi-stage-docker-python/

【讨论】:

    猜你喜欢
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2015-10-27
    • 1970-01-01
    • 2021-03-25
    • 2019-02-02
    • 2019-10-09
    相关资源
    最近更新 更多