Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

adding startup script to dockerfile

I have built my docker image using openjdk.

# config Dockerfile
FROM openjdk:8
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp

# build image
docker build -t shantanuo/dbt .

It is working as expected using this command...

docker run -p 8081:8080  -it shantanuo/dbt

Once I log-in, I have to run this command...

sh bin/startup.sh

My Question: Is it possible to add the startup command to dockerfile? I tried adding this line in my dockerfile.

CMD ["sh", "bin/startup.sh"]

But after building the image, I can not use -d parameter to start the container.

like image 522
shantanuo Avatar asked Jul 28 '17 10:07

shantanuo


2 Answers

This is addressed in the documentation here: https://docs.docker.com/config/containers/multi-service_container/

If one of your processes depends on the main process, then start your helper process FIRST with a script like wait-for-it, then start the main process SECOND and remove the fg %1 line.

#!/bin/bash
  
# turn on bash's job control
set -m
  
# Start the primary process and put it in the background
./my_main_process &
  
# Start the helper process
./my_helper_process
  
# the my_helper_process might need to know how to wait on the
# primary process to start before it does its work and returns
  
  
# now we bring the primary process back into the foreground
# and leave it there
fg %1
like image 188
ManishM Avatar answered Oct 14 '22 16:10

ManishM


You can use the entrypoint to run the startup script. In the entrypoint you can specify yoour custom script and then run catlina.sh. Example:

ENTRYPOINT "bin/startup.sh && catalina.sh run"

This will run your startup script and then start your tomcat server. It wont exit the container.

like image 32
Ayushya Avatar answered Oct 14 '22 17:10

Ayushya