运行Docker容器的Shell脚本

fkvaft9z  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(174)

我创建了一个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

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

kg7wmglp

kg7wmglp1#

当你这样做

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

相关问题