Docker运行容器执行bash脚本提示文件不存在报错如何解决
故障根因
报错本质是容器内脚本路径和执行命令的查找路径不匹配,连带存在几处冗余/错误配置:
- 路径映射逻辑错误:
COPY . /functionfibonnaci/doc-conatiner会把你本地build上下文的所有文件复制到容器的/functionfibonnaci/doc-conatiner目录下,但容器启动后的默认工作目录是根目录/,你在CMD里写的functionfibonnaci.sh是相对路径,bash只会在当前工作目录也就是/下查找脚本,自然找不到对应文件。 - 冗余危险配置:
RUN chmod 700 .执行位置是容器根目录/,给根目录设置700权限完全没有必要,还可能触发系统级目录权限异常,直接删除该行即可。 - 拼写笔误:你创建的目录名写的是
doc-conatiner(正确拼写为container,漏写了字母n),虽然和后续COPY路径拼写一致不会直接触发本次报错,但属于易混淆的笔误,建议修正。
修正方案
直接替换为如下Dockerfile即可:
FROM ubuntu # 提前创建目标目录,-p参数保证多级目录不存在时自动创建 RUN mkdir -p /functionfibonacci/doc-container # 仅复制需要的脚本到目标目录,避免把本地无关文件全部打入镜像 COPY functionfibonnaci.sh /functionfibonacci/doc-container/ # 给脚本添加可执行权限,避免后续执行报权限错误 RUN chmod +x /functionfibonacci/doc-container/functionfibonnaci.sh # 明确设置工作目录,后续所有命令都基于该目录执行 WORKDIR /functionfibonacci/doc-container # 执行脚本,写相对路径即可,也可以直接写绝对路径跳过WORKDIR配置 CMD ["bash", "./functionfibonnaci.sh"]
如果不想配置WORKDIR,直接把CMD改成绝对路径写法也可以正常运行:CMD ["bash", "/functionfibonacci/doc-container/functionfibonnaci.sh"]
验证注意事项
- 构建镜像前确认本地build目录(即执行docker build命令所在的目录)下确实存在
functionfibonnaci.sh文件,文件名大小写、拼写完全和Dockerfile中写的一致,不要出现后缀漏写、字母拼错的问题。 - 重新构建镜像时不要漏了最后的点:
docker build -t fib-demo . - 构建完成后执行
docker run --rm fib-demo即可正常运行脚本。
内容的提问来源于stack exchange,提问作者JnooriRS
相关产品推荐
相关产品推荐

