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