Проверка работоспособности Docker и приложение Node.js - PullRequest
0 голосов
/ 11 июня 2019

Я пытался включить healthcheck в мой контейнер, однако, независимо от того, что я делаю, контейнер никогда не работает.Если быть точным, у меня есть следующая структура:

  1. Traefik Proxy
  2. 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 не будет иметь доступа к контейнеру.

...