Có.
Trước tiên, hãy nhận ra rằng depends-on
là gần như hoàn toàn vô dụng. Docker không biết gì về ứng dụng của bạn; nó không có cách nào để nói rằng máy chủ cơ sở dữ liệu của bạn không thực sự sẵn sàng để đáp ứng các yêu cầu dịch vụ.
Giải pháp chính xác là viết mã ứng dụng của bạn để (a) nó sẽ thử lại kết nối cơ sở dữ liệu ban đầu cho đến khi nó sẵn sàng và (b) nó sẽ kết nối lại với cơ sở dữ liệu nếu kết nối không thành công. (a) giải quyết vấn đề bạn đang hỏi và (b) cho phép bạn khởi động lại vùng chứa cơ sở dữ liệu độc lập với vùng chứa ứng dụng.
Nếu bạn không kiểm soát mã trong vùng chứa ứng dụng của mình, bạn có thể bọc lệnh chính của mình bằng một tập lệnh shell thực hiện điều gì đó như:
while ! psql -c 'select 1'; do
sleep 1
done
(Đặt các tùy chọn xác thực thích hợp hoặc thiết lập .pgpass
tệp)