我正在创建脚本,将其复制到容器中并尝试运行。但是,似乎COPY命令不能正常工作。
以下是Dockerfile的内容。
FROM busybox:latest
COPY random.sh /bin/random.sh
ENTRYPOINT /bin/random.sh
下面是要复制的脚本文件的内容。
#!/bin/bash
trap "exit" SIGINT
mkdir /var/htdocs
SET=$(seq 0 999999)
for i in $SET
do
echo "Running $RANDOM" > /var/htdocs/index.html
sleep 10
done
在Dockerfile所属的目录中,要复制的脚本如下。
-rw-r--r-- 1 pp pp 76 Oct 4 09:19 Dockerfile
-rwxr-xr-x 1 pp pp 154 Oct 4 09:33 random.sh*
通过在Dockerfile所在的目录中运行以下命令将映像上载到Dockerhub。
docker build -t dockerhubid/repo .
docker push dockerhubid/repo
并使用以下命令启动容器。
docker start dockerhubid/repo
但是,该容器不会出现以下错误。为什么找不到复制的脚本?
/bin/bash: line 1: /bin/random.sh: not found
这不是DockerCOPY
命令的问题,而是脚本解释器在脚本开始时进行了扩展。错误不是声称/bin/random.sh
不存在,而是找不到脚本解释器/bin/bash
。
该Busybox的图像也不会有一个/bin/bash
解释,只/bin/sh
。如果您的脚本仅与bash兼容,则您需要安装Bash解释器,或者将shebang的第一行更改为#!/bin/sh
。粗略地看,我认为此示例脚本是/bin/sh
兼容的。
针对Windows主机构建时的另一个重要注意事项是,该文件通常使用CRLF
(例如\r\n
)行结尾,这与Linux shebangs不兼容(例如,它将解析为/bin/sh\r
)。必须将文件结尾正确设置为LF
(即\n
),脚本才能运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句