Alex Triphonov
Alex Triphonov

Reputation: 1

Docker make .sh executable and run it

I'm trying to give executable permission to my script inside docker image and run it. I don't want to set chmod + x for it in Dockerfile. i tried

docker run img /bin/bash -c "chmod +x ../test/test.sh; ../test/test.sh

but i got "/bin/bash: bad interpreter: Text file busy"

and i can't just make two containers with this commands:

docker run -d img chmod +x ../test/test.sh

docker run -d img ../test/test.sh

=> starting container process caused "exec: \"../test/testing.sh\": permission denied"

i need somehow bind this two containers together

Upvotes: 0

Views: 15454

Answers (3)

Alex Triphonov
Alex Triphonov

Reputation: 1

Ok, i've figured it:

first i made a container:

docker run --name CONTAINER -dt IMAGE

then exec my commands:

docker exec CONTAINER chmod +x ../test/test.sh 

docker exec CONTAINER ../test/test.sh

Upvotes: 0

Robert
Robert

Reputation: 36853

You don't need to set perms if you just pass your script as parameter:

docker run -d IMAGE /bin/bash ../test/test.sh

(add -i and/or -t if you need them)

Upvotes: 0

Julian
Julian

Reputation: 2822

Text file busy means that something is already using the file.

Normally this would work

docker run --rm -it alpine sh -c 'echo "echo it works" > test.sh && chmod +x test.sh && ./test.sh'

With the second command you create two new containers, that are completly seperate. If you want to execute something in an running container you can use docker exec -it <container id or name> <command e.g. bash>

Upvotes: 1

Related Questions