Docker 构建找不到文件

标签 docker dockerfile

我是 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 构建找不到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49578042/

相关文章:

ruby-on-rails - Docker未安装yarn

node.js - 在Docker中安装 Node v8

curl 在构建时不下载容器内的文件

docker - 在 Docker Compose 日志中打印时间戳

git - 使 Docker 容器保持最新

azure - 从 Windows docker 容器访问 Azure 实例元数据服务 (169.254.169.254)

postgresql - 无法使用 Sequelize 的 Docker Compose 连接到 Postgres 容器

docker - 容器之间是否共享docker环境变量?

node.js - 如何修复用于运行Node.js的: The feature watch recursively is unavailable on the current platform,

angular - 将Angular6项目部署到Docker