我正在尝试编写一个包含 bash 脚本的简单 dockerfile。docker 文件如下所示:
FROM openjdk:8-jre-alpine
COPY . /build/demo
WORKDIR /build/demo/
RUN pwd; ls
RUN chmod +x run-demo.sh
RUN run-demo.sh 1 zk
上下文文件目录(精简后)如下所示:
- Dockerfile
- 建造
- 演示
- 运行演示文件
- 演示
我有一个RUN pwd; ls
输出步骤
RUN pwd; ls
---> Running in f22ce9175cee
/build/demo
run-demo.sh
但一旦docker build .
到达最后一个命令,它就会说/bin/sh: run-demo.sh: not found
。这怎么可能呢?谢谢
编辑:并且脚本以 !#/bin/bash 开头(如果相关的话)编辑2:
RUN pwd; ls -l
---> Running in 16fbda2c19e1
/build/demo
-rwxr-xr-x 1 root root 775 Jun 12 21:14 run-demo.sh
Removing intermediate container 16fbda2c19e1
---> bf8ada47953a
Step 7/7 : RUN ./run-demo.sh 1 zk
---> Running in daccefe3c895
/bin/sh: ./run-demo.sh: not found
答案1
我已经解决了。我的基本映像 openjdk:8-jre-alpine 没有打包 bash
答案2
要直接运行程序(如您所尝试的),它必须位于变量中列出的目录之一中PATH
。要在其他位置运行文件,您需要明确提供其路径,例如./run-demo.sh
或/build/demo/run-demo.sh
。