我创建了一个包含以下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
额外信息
WORKDIR /work
答案 0 :(得分:1)
作为一般性注释,从不对任何内容进行“ chmod 777”。
无论您要实现什么目的,“ chmod 0755”就足够了。在极少数情况下可能不是这样,现在还为时过早,以了解为什么需要授予比此更多的权限。
答案 1 :(得分:0)
ls -l
检查权限。sudo chmod 777 file_name
授予权限777。答案 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