Shell 运行 docker 容器上的脚本

Shell script on running a docker container

我创建了一个 Dockerfile 如下所示:

From alpine:latest

WORKDIR /
COPY ./init.sh .
CMD ["/bin/sh", "./init.sh"]

和脚本文件 init.sh 如下所示:

#!/bin/sh

mkdir -p mount_point
echo hello > ./mount_point/hello.txt

我使用这些构建图像:

docker build . -t test_build

和运行作为

docker container run --rm --name test_run -it test_build sh

其中文件夹()中只有上述两个文件。

在容器中,我可以在主机中找到 x(可执行)的 init.sh 文件。

但是,没有

应该创建的文件夹mount_point
CMD ["bin/sh", "./init.sh"]

请注意,当我在容器中 运行 以下任何一项时,它会按我的预期成功创建 mount_point

sh init.sh

/bin/sh init.sh

sh -c ./init.sh

你能告诉我哪里出错了吗?

当你这样做时

docker container run --rm --name test_run -it test_build sh

末尾的 sh 覆盖了图像中的 CMD 定义,而 CMD 不是 运行。

要验证您的脚本是否有效,您可以将脚本更改为类似这样的内容

#!/bin/sh
echo Hello from the script!
mkdir -p mount_point
echo hello > ./mount_point/hello.txt
ls -al ./mount_point

然后 运行 没有 sh 的图像,您应该看到 'Hello' 消息和 ./mount_point 目录中的目录列表。

docker container run --rm --name test_run test_build