How to execute the Entrypoint of a Docker images at each "exec" command?
bash, docker, dockerfile, entry-point, shell
Solution
if your goal is to run the `docker exec` with a specific user inside of the container, you can use the `--user` option.
`docker exec --user myuser container-name [... your command here]`
If you want to run `gosu` every time, you can specify that as the command with `docker exec`
`docke exec container-name gosu 1000:1000 [your actual command here]`
in my experience, the best way to encapsulate this into something easily re-usable is with a .sh script (or .cmd file in windows).
drop this into a file in your local folder... maybe `gs` for example.
#! /bin/sh
docker exec container-name gosu 1000:1000 "$@"
give it execute permissions with `chmod +x gs` and then run it with `./gs` from the local folder
Problem
After trying to test Dockerfiles with Dockerspec, I finally had an issue I can't resolve properly. The problem is, I think, from Docker itself ; If I understand its process, an Entrypoint is only executed at run, but if the container stay started and I launch an "exec" command in, it's not re-called. I think it's the wanted behavior. But if the Entrypoint is a "gosu" script which precede all my commands, it's a problem... Example "myImage" has this Entrypoint : `gosu 1000:1000 "$@"` If I launch : `docker run -it myImage id -u` The output is "1000". If I start a container : `docker run -it myImage bash` In this container, `id -u` outputs "1000". But if I start a new command in this container, it starts a new shell, and does not execute the Entrypoint, so : `docker exec CONTAINER_ID id -u` Output "0", because the new shell is started as "root". It there a way to execute each time the entrypoint ? Or re-use the shell open ? Or a better way to do that ? Or, maybe I haven't understand anything ? ;) Thanks ! EDIT After reading solutions proposed here, I understand that the problem is not how Docker works but how Serverspec works with ; my goal is to directly test a command as a `docker run` argument, but Serverspec start a container and test commands with `docker exec`. So, the best solution is to found how get the stdout of the `docker run` executed by Serverspec. But, in my personal use-case, the best solution is maybe to not use Gosu but --user flag :)