错误:当我尝试配置我的第一个 dockerfile 时,“命令 '/bin/sh -c source protected-env/bin/activate' 返回非零代码:127”

错误:当我尝试配置我的第一个 dockerfile 时,“命令 '/bin/sh -c source protected-env/bin/activate' 返回非零代码:127”

我正在努力学习docker。这是我的第一个实验。我写了这个 dockerfile :

FROM nvidia/cudagl:11.3.0-base-ubuntu20.04

LABEL Author="ZioMario"
LABEL Title="Firefox/Docker20.10.6/Ubuntu20.04"

# Enviorment variables

ENV DEBIAN_FRONTEND noninteractive
ENV LC_ALL C.UTF-8
ENV LANG C.UTF-8
ENV PATH "$PATH:/bin/2.82/python/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
ENV FIREFOX_PATH "/bin/2.82"
ENV FIREFOXPIP "/bin/2.82/python/bin/pip3"
ENV FIREFOXPY "/bin/2.82/python/bin/python3.7m"
ENV HW="GPU"

# Install dependencies

RUN apt-get update && apt-get install -y \ 
    apt-utils \
    wget \ 
    libopenexr-dev \ 
    bzip2 \ 
    build-essential \ 
    zlib1g-dev \ 
    libxmu-dev \ 
    libxi-dev \ 
    libxxf86vm-dev \ 
    libfontconfig1 \ 
    libxrender1 \ 
    libgl1-mesa-glx \ 
    xz-utils \
    firefox \
    openjdk-8-jre

# Download the Python source

RUN wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz \ 
    && tar -xzf Python-3.7.0.tgz \ 
    && cp -r Python-3.7.0/Include/* $FIREFOX_PATH/python/include/python3.7m/ \ 
    && rm -rf Python-3.7.0.tgz \ 
    && rm -rf Python-3.7.0 

# Installing a modern version of numpy

RUN rm -rf ${FIREFOX_PATH}/python/lib/python3.7/site-packages/numpy 

# Must first ensurepip to install Firefox pip3 and then new numpy

RUN ${FIREFOXPY} -m venv protected-env

RUN source protected-env/bin/activate

RUN ${FIREFOXPY} -m ensurepip && ${FIREFOXPIP} install --upgrade pip && ${FIREFOXPIP} install numpy
RUN deactivate

# Set the working directory
WORKDIR /

不幸的是它不起作用。这是我收到的错误:

命令“/bin/sh -c source protected-env/bin/activate”返回非零代码:127

错误的行是这样的:

运行源 protected-env/bin/activate

您知道如何解决它吗?谢谢。

答案1

RUN source protected-env/bin/activate

没有意义。

activate是一个设置一些环境变量的脚本对于当前外壳;然而,当前的 shell 在获取该文件后直接终止。所以,它没有任何作用。尤其是,对下一行没有任何影响!

然而,您的错误源于您试图运行sh脚本用sh,这不起作用。这里的解决方案是将所有这些东西(获取激活文件,使用 pip 安装东西)放入一个以 开头的 shell 脚本中#!/bin/bash,以便它可以一次性执行,然后COPY将其放入容器映像中,然后RUNning 。

但是,我还没有遇到通过 pip 安装 numpy 的理由。您可能不应该这样做,而是使用apt!

同样,甚至更重要的是,Python 本身也适用。不要从源代码构建它——我不知道你的指南来自哪里,但说真的,这是一个糟糕的主意。你的 ubuntu 附带了 Python3,很可能已经预装了,或者可以安装apt install python3,完成!总的来说,您只需将其添加python3-numpy到要安装的软件包列表的末尾即可完成;不需要下载 python,不需要构建它,当然也不需要获取一些激活文件并通过 pip 安装 numpy!

相关内容