如何在docker文件中修复“sh:0:无法打开start.sh”?

时间:2017-11-20 09:34:23

标签: shell selenium docker

我创建了一个包含以下CMD的docker镜像:

CMD ["sh", "start.sh"]

当我运行docker镜像时,我在Makefile

中使用以下命令
docker run --rm -v ${PWD}:/selenium $(DOCKER_IMAGE)

将文件从当前(host-)目录复制到docker的/selenium文件夹。这些文件包含selenium测试的文件以及文件start.sh。但是在容器启动后,我立即得到了错误

"sh: 0: Can't open start.sh"

在命令运行后,主机卷可能已安装在docker 中?还有其他什么可以解释这个错误,以及如何解决它?

也许有一种方法可以在docker中运行多个命令来查看最新情况?像

CMD ["ls", ";", "pwd", ";", "sh", "start.sh"]

更新

当我使用以下命令时,我使用Dockerfile

CMD ["ls"]

我收到错误

ls: cannot open directory '.': Permission denied

额外信息

  • Docker版本1.12.6
  • 入口点:WORKDIR /work

4 个答案:

答案 0 :(得分:1)

作为一般性注释,从不对任何内容进行“ chmod 777”。

无论您要实现什么目的,“ chmod 0755”就足够了。在极少数情况下可能不是这样,现在还为时过早,以了解为什么需要授予比此更多的权限。

答案 1 :(得分:0)

  1. 使用ls -l检查权限。
  2. 使用sudo chmod 777 file_name授予权限777。
  3. 重复您可能会找到的其他文件。

答案 2 :(得分:0)

如果您尝试使用通过bash运行的docker手动执行每个步骤,

docker exec -it (container name) /bin/bash

查看错误会更容易,更快捷,并且可以更改权限,查看文件的位置,然后再运行.sh文件,然后重试。

答案 3 :(得分:0)

您将卷安装到容器中的 /selenium 文件夹。因此 start.sh 文件不会在您的工作目录中,而是在 /selenium 中。您想将卷挂载到工作目录中的 selenium 文件夹,然后确保该命令引用此新路径。

如果您使用 docker-compose 运行容器的 yml 文件将如下所示:

version: '3'

services:
  start:
    image: ${DOCKER_IMAGE}
    command: sh selenium/start.sh
    volumes:
      - .:/work/selenium