【问题标题】:How to fix "sh: 0: Can't open start.sh" in docker file?如何修复docker文件中的“sh:0:无法打开start.sh”?
【发布时间】:2018-05-03 11:36:09
【问题描述】:

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

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

当我运行 docker 映像时,我在 Makefile 中使用以下命令

docker run --rm -v ${PWD}:/selenium $(DOCKER_IMAGE)

将文件从当前(主机)目录复制到 docker 的 /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

【问题讨论】:

  • 您是否尝试过使用这里建议的/bin/shRunning a script inside a docker container using shell script
  • 不能用简单的ls来解释我遇到的问题...
  • 您运行的是什么版本/平台的 Docker?卷源有哪些权限,包括主机上的uid/gid?
  • 您的图片的ENTRYPOINT 是什么?它是默认的 (/bin/sh -c) 吗?如果不是,也许这就是ls 失败的原因。
  • 如果您解决了问题,请回答。如果没有,请提供您的环境的更多详细信息,以便我们弄清楚发生了什么(例如,一个完整的 Dockerfile 以便我们重现您的问题)。无论如何,您是否尝试运行pwd 来检查工作目录是什么? whoami 也可能有用。

标签: shell selenium docker


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

【讨论】:

  • Victor 感谢您的编辑,但我认为这还不够。此外,他们将面临问题。最好说授予您要打开或执行的 .sh 文件的权限。
【解决方案2】:

如果您尝试手动执行每个步骤,请使用 docker runbash

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

查看错误会更方便快捷,可以更改权限,查看文件所在位置,再运行.sh文件后再试。

【讨论】:

    【解决方案3】:

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

    如果你使用 docker-compose 来运行容器的 yml 文件看起来像这样:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 2019-08-29
      • 2020-03-11
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多