构建 docker:opt/conda/bin/conda 未找到

Whi*_*eok 3 linux docker

我对docker完全陌生,我需要在docker环境中运行代码。

我在构建 Dockerfile 时遇到错误:

我通过 hyper-V 运行 Ubuntu 20.04,当我构建 Dockerfile 时,我收到以下消息:

Step 4/20 : RUN curl -o ~/miniconda.sh -O  https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh  &&      chmod +x ~/miniconda.sh &&      ~/miniconda.sh -b -p /opt/conda &&      rm ~/miniconda.sh &&      /opt/conda/bin/conda install numpy pyyaml scipy ipython mkl &&      /opt/conda/bin/conda install -c soumith magma-cuda90 &&      /opt/conda/bin/conda clean -ya <br />
 ---> Running in 9758f4fe60a4 <br />
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current 

                                 Dload  Upload   Total   Spent    Left  Speed 
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0 
/bin/sh: 1: /opt/conda/bin/conda: not found
The command '/bin/sh -c curl -o ~/miniconda.sh -O  https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh  &&      chmod +x ~/miniconda.sh &&      ~/miniconda.sh -b -p /opt/conda &&      rm ~/miniconda.sh &&      /opt/conda/bin/conda install numpy pyyaml scipy ipython mkl &&      /opt/conda/bin/conda install -c soumith magma-cuda90 &&      /opt/conda/bin/conda clean -ya' returned a non-zero code: 127
Run Code Online (Sandbox Code Playgroud)

Dockerfile:

Step 4/20 : RUN curl -o ~/miniconda.sh -O  https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh  &&      chmod +x ~/miniconda.sh &&      ~/miniconda.sh -b -p /opt/conda &&      rm ~/miniconda.sh &&      /opt/conda/bin/conda install numpy pyyaml scipy ipython mkl &&      /opt/conda/bin/conda install -c soumith magma-cuda90 &&      /opt/conda/bin/conda clean -ya <br />
 ---> Running in 9758f4fe60a4 <br />
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current 

                                 Dload  Upload   Total   Spent    Left  Speed 
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0 
/bin/sh: 1: /opt/conda/bin/conda: not found
The command '/bin/sh -c curl -o ~/miniconda.sh -O  https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh  &&      chmod +x ~/miniconda.sh &&      ~/miniconda.sh -b -p /opt/conda &&      rm ~/miniconda.sh &&      /opt/conda/bin/conda install numpy pyyaml scipy ipython mkl &&      /opt/conda/bin/conda install -c soumith magma-cuda90 &&      /opt/conda/bin/conda clean -ya' returned a non-zero code: 127
Run Code Online (Sandbox Code Playgroud)

当我直接在命令提示符下尝试运行命令时,效果很好。

但是,每个命令都是'not found'在我构建 Dockerfile、julia、pip 等时。(当我注释掉 conda... 部分时)
我该如何解决这个问题?

小智 7

/bin/sh: 1: /opt/conda/bin/conda: not found错误是由于conda安装不正确造成的。这是因为miniconda.sh您下载的文件(带有curl -o ~/miniconda.sh -O https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh)是一个空文件。

发生这种情况是因为默认情况下,curl 不遵循重定向,并且上面 url 的响应发送重定向而不是miniconda.sh直接发送文件。您可以通过检查 URL 标头(例如curl -i https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh显示 HTTP 301 重定向状态代码)来验证这一点。

您可以通过告诉curl遵循重定向、在curl命令中提供-L标志来解决此问题,例如:

(我也不得不删除sudo

RUN curl -L -o ~/miniconda.sh -O  https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh  && \
     chmod +x ~/miniconda.sh && \
     ~/miniconda.sh -b -p /opt/conda && \     
     rm ~/miniconda.sh && \
     /opt/conda/bin/conda install numpy pyyaml scipy ipython mkl && \
     /opt/conda/bin/conda install -c soumith magma-cuda90 && \
     /opt/conda/bin/conda clean -ya 

Run Code Online (Sandbox Code Playgroud)

这是一些调试信息/研究:

miniconda.sh您可以通过查看上面代码片段中的curl 输出来验证空白是否是问题所在。它看起来有点神秘,但你可以看到实际上没有下载任何内容

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current 

                                 Dload  Upload   Total   Spent    Left  Speed 
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0 
Run Code Online (Sandbox Code Playgroud)

当我尝试构建添加了 -L 标志的 docker 映像时,输出如下所示:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:--  0:00:03 --:--:--     0
100 88.7M  100 88.7M    0     0  11.9M      0  0:00:07  0:00:07 --:--:-- 34.7M
Run Code Online (Sandbox Code Playgroud)

您还可以通过删除下载/运行部分之前的所有内容来手动检查 miniconda.sh 的内容

(例如,将所有内容保留到这一部分)

RUN sudo curl -o ~/miniconda.sh -O  https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh  && \
     chmod +x ~/miniconda.sh && \
     ~/miniconda.sh -b -p /opt/conda
Run Code Online (Sandbox Code Playgroud)

然后运行sudo docker run -it containername /bin/bash并检查 miniconda.sh 的内容(cat ~/miniconda.sh显示该文件为空)。