如何在 docker 文件中 运行 一个 sh 脚本?

How to run an sh script in docker file?

当 运行 在 docker 文件中的 sh 脚本时,出现以下错误:

./upload.sh: 5: ./upload.sh: sudo: not found ./upload.sh: 21:
./upload.sh: Bad substitution

sudo chmod 755 upload.sh # line 5
version=$(git rev-parse --short HEAD)
echo "version $version"
echo "Uploading file"

for path in $(find public/files -name "*.txt"); do
  echo "path $path"
  WORDTOREMOVE="public/" 
  echo "WORDTOREMOVE $WORDTOREMOVE"
  # cause of the error
  newpath=${path//$WORDTOREMOVE/} # Line 21
  echo "new path $path"
  url=http://localhost:3000/${newpath}
  ...
  echo "Uploading file"
  ...
done

Docker 文件

FROM node:10-slim

EXPOSE 3000 4001


WORKDIR /prod/code
...
COPY . .

RUN ./upload.sh
RUN npm run build
CMD ./DockerRun.sh

有什么想法吗?

您正在使用的 docker 映像 (node:10-slim) 没有安装 sudo,因为此 docker 映像 运行s 以用户 root 身份处理:

docker run -it node:10-slim bash root@68dcffceb88c:/# id uid=0(root) gid=0(root) groups=0(root) root@68dcffceb88c:/# which sudo root@68dcffceb88c:/#

当你的 Dockerfile 运行s RUN ./upload.sh 它将 运行: sudo chmod 755 upload.sh

在 docker 中使用 sudo 失败,因为未安装 sudo,不需要在 docker 中使用 sudo,因为 docker [=36] 中的所有命令=] 作为根用户。

只需删除第 5 行的 sudo。

如果您想更新 运行ning PATH 变量 运行:

PATH=$PATH:/directorytoadd/bin

这会将目录“/directorytoadd/bin”附加到当前路径。

如果有人遇到同样的问题,请参考我的解决方法

  1. chmod +x upload.sh

  2. git update-index --chmod=+x upload.sh(如果您在更改权限之前将文件推送到远程分支,则必须这样做)