My current docker-compose.yml -
# This docker-compose file uses \'.env\' file present in the current directory,
# for database credentials.
depends_on just guaranteed that database service run before web service.
To run web service after database is ready, use wait_for_it.sh script
https://docs.docker.com/compose/startup-order/
For example, i have a docker-compose.yml file with two services: app and db, and i want to run container app after db service are ready:
docker-compose.yml
version: "2"
services:
app:
image: employee-jdbc
ports:
- "8080:8080"
networks:
- employee-mysql
depends_on:
- mysqldb
container_name: employee-jdbc
db:
image: mysql:5.7
networks:
- employee-mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=bootdb
container_name: mysqldb
networks:
employee-mysql:
external: true
In Dockerfile to build employee-jdbc image:
Dockerfile
FROM openjdk:8
COPY ./target/*.jar ROOT.jar
COPY wait-for-it.sh /wait-for-it.sh
RUN chmod +x /wait-for-it.sh
ENTRYPOINT ["./wait-for-it.sh","db:3306","--","java","-jar","ROOT.jar"]
wait_for_it.sh file you can download at: https://github.com/vishnubob/wait-for-it