gpt4 book ai didi

bash - Dockerfile的COPY命令无法正常工作

转载 作者:行者123 更新时间:2023-12-02 21:32:14 25 4
gpt4 key购买 nike

我正在创建脚本,将其复制到容器中并尝试运行。
但是,似乎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

最佳答案

这不是Docker的COPY命令的问题,而是脚本解释器在脚本开始时启动。该错误不是说/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)才能运行脚本。

关于bash - Dockerfile的COPY命令无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64193284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com