Docker运行状况检查和Node.js应用程序

时间:2019-06-11 18:47:10

标签: node.js docker traefik

我一直试图在容器中加入 healthcheck ,但是,无论我做什么,容器似乎都无法正常工作。确切地说,我具有以下结构:

  1. trafik代理
  2. 该代理后面的Node.js应用程序

特拉菲克的所有标签都包含在docker-compose.yml文件中。

每当我尝试在Dockerfiledocker-compose.yml中添加运行状况检查时,都会构建应用程序并侦听端口443上的连接,但是,当我尝试从浏览器访问地址时,它总是显示404 error Traefik 无法代理容器时)。

这是简单的 service 配置:

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();

当我启动没有 HEALTHCHECK 选项(Dockerfile或compose)的容器时,它工作得很好,显示了页面,并且当我手动执行yarn healthcheck时,它表明一切很好(我的意思是在控制台中,STATUS: 200)。但是,通过自动运行状况检查,Traefik将无法访问该容器。

0 个答案:

没有答案