Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Docker How to run /usr/sbin/init and then other scripts on start up [closed]

Dockerfile

FROM centos:7
COPY docker-entrypoint.sh /data/
ENTRYPOINT ["/data/docker-entrypoint.sh"]

docker-entrypoint.sh

exec /usr/sbin/init && systemctl restart autofs %% python /data/myapp.py

I need to run /usr/sbin/init as the first command then run subsequent commands such as systemctl restart autofs and python myapp.py

I cant seem to get all working inside docker-entrypoint.sh because /usr/sbin/init does not return

if i change docker-entrypoint.sh to

/usr/sbin/init &
systemctl restart autofs && python /data/myapp.py

it fails with error in d-bus

what can i do so the container runs /usr/sbin/init, systemctl restart autofs and python /data/myapp.py in that order when "docker run" is executed?

Is there any other ways to run commands after /usr/sbin/init is executed? i've tried putting systemctl as CMD in Dockerfile

FROM centos:7
ENTRYPOINT ["/usr/sbin/init"]
CMD ["systemctl restart autofs"]

but CMD is never executed

like image 574
ealeon Avatar asked Feb 10 '18 11:02

ealeon


People also ask

Can you run multiple processes in a docker container?

It's ok to have multiple processes, but to get the most benefit out of Docker, avoid one container being responsible for multiple aspects of your overall application. You can connect multiple containers using user-defined networks and shared volumes.

Can we have 2 ENTRYPOINT in Dockerfile?

According to the documentation however, there must be only one ENTRYPOINT in a Dockerfile.


1 Answers

Declaring

ENTRYPOINT ["/usr/sbin/init"]
CMD ["systemctl"]

Will result in:

/usr/sbin/init systemctl

In other words, the ENTRYPOINT directive sets the executable which is used to execute the command given from the COMMAND directive.

The default ENTRYPOINT is /bin/sh -c so /bin/sh -c /data/docker-entrypoint.sh should work, if /data/docker-entrypoint.sh contains:

/usr/sbin/init
systemctl restart autofs
python /data/myapp.py

That means: You don't have to change the ENTRYPOINT

If you change the the ENTRYPOINT to /data/docker-entrypoint.sh than it should contain something like:

/usr/sbin/init
systemctl restart autofs
python /data/myapp.py
# run the command given as arguments from CMD
exec "$@"

reference

like image 134
philipp Avatar answered Oct 12 '22 09:10

philipp