[英]cannot find .sh script from the docker container
我有看起来像这样的Dockerfile
FROM alpine:3.7
WORKDIR /home/tmp
RUN apk add autoconf && apk add py-pip && apk add python3 &&\
pip install --upgrade pip && pip install wheel
最初我想在启动时执行一个.sh
脚本(通过ENTRYPOINT
)并立即销毁容器。 但是,由于找不到文件,我决定手动执行此操作。
我像这样运行容器
docker run -it --rm -v c:/projects/mega-nz-sdk:/home/tmp mega_sdk_python
它将我连接到容器中的bash
。 在文件列表中,我可以看到要执行的脚本
/home/tmp # ls
Dockerfile compile.sh sdk-develop
/home/tmp #
但是,当我尝试运行它时,它找不到脚本
/home/tmp # ./compile.sh
/bin/sh: ./compile.sh: not found
/home/tmp #
问题是什么?
脚本compile.sh
看起来像这样
#!/bin/bash
cd sdk-develop
sh autogen.sh
./configure --disable-silent-rules --enable-python --disable-examples &&\
make
cd /bindings/python
python setup.py bdist_wheel
理想情况下,我想在容器的实例化期间执行,以便在启动时配置容器(不需要每次运行容器时都运行脚本)。
Alpine Linux 是一个非常小的发行版; 它包括符合 POSIX 规范的大多数 Unix 工具的最小版本,但仅此而已。 特别是它不包括 GNU Bash。
您的脚本实际上并未使用任何特殊的 Bash 功能,因此更改脚本的第一行以运行默认系统 Bourne shell 就足够了
#!/bin/sh
使用 Alpine apk
包管理器安装bash
也可以,但对于您在此处显示的内容,这不是必需的。
通常,您会在构建映像的过程中而不是在映像启动时运行显示的各种“编译”命令。 我希望有一个更典型的 Dockerfile 来COPY
应用程序源代码,然后RUN
您显示的命令。 这只会发生一次,当您docker build
映像时,而不是每次您想要运行打包的应用程序时。
您将目录从 win 主机安装到 docker 机器。 我相信这是一个权限问题 - 该文件未标记为可执行文件。 显示详细列表
# ls -lh
将文件夹复制到内部目录并添加可执行位
cp /home/tmp /home/tmp2 -r
chmod +x /home/tmp2/*.sh
/home/tmp2/compile.sh
似乎为了执行我的.sh
文件,我需要像这样运行它
sh compile.sh
所以我加了
CMD ["sh", "compile.sh"]
然后我开始工作(虽然失败了,因为缺少make
等其他错误,但这是由于 Alpine Linux 本身缺少软件包,所以是另一回事)。
猜猜这与Alpine Linux本身有关。 但我不确定。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.