我是Docker的新手,我正在尝试创建一个安装Intel MPI运行时的图像。我设置了WorkDir,并且在该文件夹中有不压缩的.TGZ文件。但是我无法运行install.sh
当Docker构建失败时,它仍然会创建图像。我可以从该图像中运行一个容器,可以使用同一命令手动安装。但是此命令在docker构建过程中失败,我不知道为什么。
-sachin
我的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中包含 quotes 的事实:
RUN "./install.sh --user-mode --silent ./silent.cfg --ignore-cpu"
因为您包含了引号,所以整个字符串都被评估为要运行的命令。基本上,发生的事情是:
/bin/bash -c ""./install.sh --user-mode --silent ./silent.cfg --ignore-cpu""
同样,如果您尝试在交互式外壳中使用引号运行此命令,您将获得类似的错误:
$ "./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
视为命令,其余的字符串作为要传递的参数。