繁体   English   中英

无法从 docker 容器中找到 .sh 脚本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM