我是Docker的新手,我正在尝试创建一个安装Intel MPI运行时的镜像。
我设置了WORKDIR,并且在该文件夹中压缩了.tgz文件。
但是我无法运行install.sh

当docker构建失败时,它仍会创建一个镜像。我可以从该镜像运行一个容器,也可以使用同一命令手动安装。但是此命令在Docker构建期间失败,我无法弄清楚原因。

-萨钦

我的Dockerfile:

[root@curly sachin_docker]# cat Dockerfile
FROM  centos:7
RUN useradd --create-home -s /bin/bash dumuser
ADD l_mpi-rt_2018.2.199.tgz /home/dumuser
WORKDIR /home/dumuser/l_mpi-rt_2018.2.199
RUN "./install.sh --user-mode --silent ./silent.cfg --ignore-cpu"
USER dumuser
[root@curly sachin_docker]#

输出:
> [root@curly sachin_docker]# docker build -t mympi_test .
Sending build context to Docker daemon  47.53MB
Step 1/6 : FROM  centos:7
  ---> 2d194b392dd1
Step 2/6 : RUN useradd --create-home -s /bin/bash dumuser
  ---> Using cache
  ---> a5b06d51c8c3
Step 3/6 : ADD l_mpi-rt_2018.2.199.tgz /home/dumuser
  ---> 1bfd6a2744f0
Step 4/6 : WORKDIR /home/dumuser/l_mpi-rt_2018.2.199
Removing intermediate container 3e599f1454c8
  ---> 44e5b5eed7b8
Step 5/6 : RUN "./install.sh --user-mode --silent ./silent.cfg --ignore-cpu"
  ---> Running in 2e8fc1017095
/bin/sh: ./install.sh --user-mode --silent ./silent.cfg --ignore-cpu: No such file or directory
The command '/bin/sh -c "./install.sh --user-mode --silent ./silent.cfg --ignore-cpu"' returned a non-zero code: 127 [root@curly sachin_docker]#

当我从该镜像运行容器时,可以使用相同的命令手动运行安装:
[root@curly sachin_docker]# docker run --rm -ti 44e5b5eed7b8 bash
[root@6dfc30bbb006 l_mpi-rt_2018.2.199]# /bin/sh -c  "./install.sh --user-mode --silent ./silent.cfg --ignore-cpu"
[root@6dfc30bbb006 l_mpi-rt_2018.2.199]# ls /opt/intel bin
compilers_and_libraries_2018        documentation_2018
parallel_studio_xe_2018        samples_2018 compilers_and_libraries
compilers_and_libraries_2018.2.199  impi
parallel_studio_xe_2018.2.046  uninstall
[root@6dfc30bbb006 l_mpi-rt_2018.2.199]#

最佳答案

看来问题是由于您在Dockerfile中的以下指令中包含了引号引起的:

RUN "./install.sh --user-mode --silent ./silent.cfg --ignore-cpu"

因为您已包含引号,所以整个字符串都将作为您要运行的命令进行评估。基本上,正在发生以下情况:
/bin/bash -c "\"./install.sh --user-mode --silent ./silent.cfg --ignore-cpu\""

同样,如果您尝试在交互式 shell 程序中使用带引号的命令运行此命令,则会收到类似的错误:
$ "./install.sh --user-mode --silent ./silent.cfg --ignore-cpu"
bash: ./install.sh --user-mode --silent ./silent.cfg --ignore-cpu: No such file or directory

删除引号,它将./install.sh作为命令,其余字符串作为要传入的参数。

关于docker - Docker构建无法找到以下文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49578042/

10-16 17:41