user2222
user2222

Reputation: 474

How to run an sh script in docker file?

When running a sh script in docker file, i got the following error:

./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

DockerFile

FROM node:10-slim

EXPOSE 3000 4001


WORKDIR /prod/code
...
COPY . .

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

Any idea?

Upvotes: 0

Views: 15808

Answers (2)

user2222
user2222

Reputation: 474

If anyone faces the same issue, here how I fixed it

  1. chmod +x upload.sh

  2. git update-index --chmod=+x upload.sh (mandatory if you pushed the file to remote branch before changing its permission)

Upvotes: 3

AAber
AAber

Reputation: 1759

The docker image you are using (node:10-slim) has no sudo installed on it because this docker image runs processes as user 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:/#

When your Dockerfile runs RUN ./upload.sh it will run: sudo chmod 755 upload.sh

Using sudo inside the docker fails because sudo is not installed, there is no need to use sudo inside the docker because all of the commands inside the docker run as user root.

Simply remove the sudo from line number 5.

If you wish to update the running PATH variable run:

PATH=$PATH:/directorytoadd/bin

This will append the directory "/directorytoadd/bin" to the current path.

Upvotes: 1

Related Questions