Я использую docker-compose
, чтобы запустить приложение Express / React / Mongo. В настоящее время я могу выдержать все, используя логику повтора в экспресс-приложении. Однако я бы предпочел использовать Docker's healthcheck , чтобы предотвратить строку ошибок, когда контейнеры изначально раскручиваются. Однако, когда я добавляю healthcheck
в мой docker-compose.yml
, он зависает в течение интервала времени / повторной попытки и завершается с:
ERROR: for collector Container "70e7aae49c64" is unhealthy.
ERROR: for server Container "70e7aae49c64" is unhealthy.
ERROR: Encountered errors while bringing up the project.
Кажется, что моя проверка здоровья никогда не возвращает здоровое состояние, и я не совсем уверен, почему. Весь мой docker-compose.yml
:
version: "2.1"
services:
mongo:
image: mongo
volumes:
- ./data/mongodb/db:/data/db
ports:
- "${DB_PORT}:${DB_PORT}"
healthcheck:
test: echo 'db.runCommand("ping").ok' | mongo mongo:27017/test --quiet 1
interval: 10s
timeout: 10s
retries: 5
collector:
build: ./collector/
environment:
- DB_HOST=${DB_HOST}
- DB_PORT=${DB_PORT}
- DB_NAME=${DB_NAME}
volumes:
- ./collector/:/app
depends_on:
mongo:
condition: service_healthy
server:
build: .
environment:
- SERVER_PORT=$SERVER_PORT
volumes:
- ./server/:/app
ports:
- "${SERVER_PORT}:${SERVER_PORT}"
depends_on:
mongo:
condition: service_healthy
Для test
я тоже пробовал:
["CMD", "nc", "-z", "localhost", "27017"]
И
["CMD", "bash", "/mongo-healthcheck"]
Я тоже вообще пытался бросить healthcheck
, следуя совету этого парня . Все встает, но я получаю страшные ошибки в выводе перед успешным соединением:
collector_1 | MongoDB connection error: MongoNetworkError: failed to connect to server [mongo:27017] on first connect [MongoNetworkError: connect
ECONNREFUSED 172.21.0.2:27017]
collector_1 | MongoDB connection with retry
collector_1 | MongoDB connection error: MongoNetworkError: failed to connect to server [mongo:27017] on first connect
Конечная цель - чистый запуск при запуске docker-compose up --build
. Я также рассмотрел некоторые решения в этом вопросе , но мне тоже не повезло с wait-for-it
. Как правильно подождать, пока Mongo будет запущен и запущен, прежде чем запускать другие контейнеры и добиваться чистого запуска?