I’ve been porting a web service to docker recently. As mentioned in the title, I’m encountering a weird scenario where in when I run it using docker run -dit, the service runs in the background, but when I use a docker-compose.yml, the service exits.
To be clearer, I have this entrypoint in my Dockerfile:
this is the code of start-service.sh:
#!/bin/bash /usr/local/bin/uwsgi --emperor=/data/vassals/ --daemonize=/var/log/uwsgi/emperor.log /etc/init.d/nginx start exec "$@";
as you can see, I’m just starting uwsgi and nginx here in this shell script. The last line (exec) is just make the script accept a parameter and keep it running. Then I run this using:
docker run -dit -p 8080:8080 --name=web_server webserver /bin/bash
As mentioned, the service runs OK and I can access the webservice.
Now, I tried to deploy this using a docker-compose.yml, but the service keeps on exiting/shutting down. I attempted to retrieve the logs, but I have no success. All I can see from doing docker ps -a is it runs for a second or 2 (or 3), and then exits.
Here’s my docker-compose.yml:
version: "3" services: web_server: image: webserver entrypoint: - /data/start-service.sh - /bin/bash ports: - "8089:8080" deploy: resources: limits: cpus: "0.1" memory: 2048M restart_policy: condition: on-failure networks: - webnet networks: - webnet
The entrypoint entry in the yml file is just to make sure that start-service.sh script will be ran with /bin/bash as its parameter, to keep the service running. But again, the service shuts down.