我正在努力学习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
将其放入容器映像中,然后RUN
ning 。
但是,我还没有遇到通过 pip 安装 numpy 的理由。您可能不应该这样做,而是使用apt
!
同样,甚至更重要的是,Python 本身也适用。不要从源代码构建它——我不知道你的指南来自哪里,但说真的,这是一个糟糕的主意。你的 ubuntu 附带了 Python3,很可能已经预装了,或者可以安装apt install python3
,完成!总的来说,您只需将其添加python3-numpy
到要安装的软件包列表的末尾即可完成;不需要下载 python,不需要构建它,当然也不需要获取一些激活文件并通过 pip 安装 numpy!