Я пытался включить healthcheck в мой контейнер, однако, независимо от того, что я делаю, контейнер никогда не работает.Если быть точным, у меня есть следующая структура:
- Traefik Proxy
- Node.js Приложение за этим прокси
Все метки для Traefik включены в файл docker-compose.yml
.
Всякий раз, когда я пытаюсь добавить проверку здоровья, либо в Dockerfile
, либо в docker-compose.yml
, приложение создается и прослушивает соединения через порт 443, однакокогда я пытаюсь получить доступ к адресу из браузера, он всегда показывает 404 error
(когда Traefik не может прокси-контейнер).
Вот простая услуга конфигурация:
frontend:
restart: always
build:
context: ./configuration/frontend
dockerfile: Dockerfile
environment:
- application_environment=development
- FRONTEND_DOMAIN=HOST_HERE
volumes:
- ./volumes/frontend:/app:rw
- ./volumes/backend/.env:/.env:ro
- ./volumes/backend/resources/lang:/backend-lang:rw
labels:
- traefik.enable=true
- traefik.frontend.rule=Host:HOST_HERE
- traefik.port=3000
- traefik.docker.network=traefik_proxy
- traefik.frontend.redirect.entryPoint=https
- traefik.frontend.passHostHeader=true
- traefik.frontend.headers.SSLRedirect=true
- traefik.frontend.headers.browserXSSFilter=true
- traefik.frontend.headers.contentTypeNosniff=true
- traefik.frontend.headers.customFrameOptionsValue=SAMEORIGIN
- traefik.frontend.headers.STSPreload=true
- traefik.frontend.headers.STSSeconds=31536000
healthcheck:
test: ["CMD", "cd /app && yarn healthcheck"]
interval: 10s
timeout: 5s
start_period: 60s
networks:
- traefik_proxy
И вот healthcheck.js файл, который доступен через команду yarn healthcheck
:
const http = require('https');
const options = {
host: process.env.FRONTEND_DOMAIN,
port: 443,
path: '/',
method: 'GET',
timeout: 2000
};
const healthCheck = http.request(options, (response) => {
console.log(`STATUS: ${response.statusCode}`);
if (response.statusCode === 200) {
process.exit(0);
}
else {
process.exit(1);
}
});
healthCheck.on('error', function (error) {
console.error('ERROR', error);
process.exit(1);
});
healthCheck.end();
Когда я запускаю контейнер без * 1034Опции * HEALTHCHECK (либо Dockerfile, либо compose), он работает просто отлично, отображается страница, и когда я вручную выполняю yarn healthcheck
, то он показывает, что все в порядке (я имею в виду в консоли, STATUS: 200
).Однако благодаря автоматической проверке работоспособности Traefik не будет иметь доступа к контейнеру.