我对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
显示该文件为空)。
归档时间: |
|
查看次数: |
3734 次 |
最近记录: |