Using Wait For It In Docker

Hướng dẫn sử dụng wait-for-it.sh trong Dockerfile ENTRYPOINT

1️⃣ Giới thiệu wait-for-it.sh

wait-for-it.sh là một script Bash giúp kiểm tra xem một service có sẵn sàng trước khi thực thi một lệnh khác. Điều này rất hữu ích trong Docker khi một container cần chờ một service khác (ví dụ: database) trước khi khởi chạy.


2️⃣ Cách tải wait-for-it.sh

Bạn có thể tải script này về bằng lệnh sau:

curl -o wait-for-it.sh https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh
chmod +x wait-for-it.sh

Hoặc thêm trực tiếp vào Dockerfile:

ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh /usr/local/bin/wait-for-it
RUN chmod +x /usr/local/bin/wait-for-it

3️⃣ Cách sử dụng wait-for-it.sh trong Docker ENTRYPOINT

📌 Ví dụ 1: Chờ MySQL sẵn sàng trước khi khởi chạy ứng dụng

FROM python:3.9

WORKDIR /app

COPY . /app
COPY wait-for-it.sh /usr/local/bin/wait-for-it
RUN chmod +x /usr/local/bin/wait-for-it

ENTRYPOINT ["wait-for-it", "db:3306", "--timeout=30", "--", "python", "app.py"]

👉 Lệnh trên đảm bảo app.py chỉ chạy sau khi MySQL (db:3306) sẵn sàng.


📌 Ví dụ 2: Sử dụng wait-for-it.sh trong docker-compose.yml

Nếu bạn có một service cần chờ database, bạn có thể chỉnh sửa entrypoint như sau:

📝 docker-compose.yml

version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
  app:
    build: .
    depends_on:
      - db
    entrypoint: ["wait-for-it", "db:3306", "--timeout=30", "--", "python", "app.py"]

💡 depends_on không kiểm tra nếu DB đã khởi động hoàn toàn, vì vậy wait-for-it.sh giúp đảm bảo ứng dụng chỉ khởi động khi database đã sẵn sàng.


Written on March 28, 2025