Guillaume
Guillaume

Reputation: 335

Multi command with docker in a script

With docker I would like to offer a vm to each client to compile and execute a C program in only one file.

For that, I share a folder with the docker and the host thanks to a dockerfile and the command "ADD". My folder is like that:

folder/id_user/script.sh
folder/id_user/code.c

In script.sh: gcc ./compil/code.c -o ./compil/code && ./compil/code

My problem is in the doc we can read this for ADD:

All new files and directories are created with mode 0755, uid and gid 0.

But when I launch "ls" on the file I have:

ls -l compil/8f41dacd-8775-483e-8093-09a8712e82b1/
total 8
-rw-r--r-- 1 1000 1000 51 Feb 11 10:52 code.c
-rw-r--r-- 1 1000 1000 54 Feb 11 10:52 script.sh

So I can't execute the script.sh. Do you know why?

Maybe you wonder why proceed like that. It's because if I do: sudo docker run ubuntu/C pwd && pwd

result:
/
/srv/website

So we can see the first command is in the VM but not the second. I understand it might be normal for docker.

If you have any suggestion I'm pleased to listen it.

Thanks !

Upvotes: 0

Views: 235

Answers (2)

Reza S
Reza S

Reputation: 9768

Either that your you can do:

RUN /bin/sh /root/script.sh 

to achieve the same result

Upvotes: 0

Jiri
Jiri

Reputation: 16625

You can set up the correct mode by RUN command with chmod:

# Dockerfile
...
ADD script.sh /root/script.sh
RUN chmod +x /root/script.sh
...

The second question, you should use CMD command - && approach does work in Dockerfile, try to put this line at the end of your Dockerfile:

CMD pwd && pwd

then docker build . and you will see:

root@test:/home/test/# docker run <image>
/
/

Upvotes: 2

Related Questions