./wait-for is a script designed to synchronize services like docker containers. It is sh and alpine compatible. It was inspired by vishnubob/wait-for-it, but the core has been rewritten at Eficode by dsuni and mrako.
When using this tool, you only need to pick the wait-for file as part of your project.
./wait-for host:port [host:port] [-t timeout] [-- command args]
-q | --quiet Do not output any status messages
-t TIMEOUT | --timeout=timeout Timeout in seconds, zero for no timeout
-- COMMAND ARGS Execute command with args after the test finishes
To check if eficode.com is available:
$ ./wait-for www.eficode.com:80 -- echo "Eficode site is up"
Connection to www.eficode.com port 80 [tcp/http] succeeded!
Eficode site is up
To wait for database container to become available:
version: '2'
services:
db:
image: postgres:9.4
backend:
build: backend
command: sh -c '/scripts/wait-for db:5432 -- npm start'
volumes:
- scripts-volume:/scripts
depends_on:
- db
scripts:
image: hhxiao/wait-for
volumes:
- scripts-volume:/wait-for
volumes:
scripts-volume:
To wait for kafka and cassandra container to become available:
version: '2'
services:
cassandra:
image: cassandra:3.10
ports:
- "9042:9042"
kafka:
image: spotify/kafka
ports:
- "2181:2181"
- "9092:9092"
environment:
- ADVERTISED_HOST=kafka
- ADVERTISED_PORT=9092
backend:
build: backend
command: sh -c '/scripts/wait-for cassandra:9042 kafka:9092 -- npm start'
volumes:
- scripts-volume:/scripts
depends_on:
- cassandra
- kafka
scripts:
image: hhxiao/wait-for
volumes:
- scripts-volume:/wait-for
volumes:
scripts-volume:
Ironically testing is done using bats, which on the other hand is depending on bash.
docker build -t wait-for .
docker run -t wait-for