Docker HEALTHCHECK завершается с ошибкой в ​​nodejs express приложении - PullRequest
0 голосов
/ 25 марта 2020

Я настроил новую команду docker HEALTHCHECK для контейнера узла / express следующим образом

HEALTHCHECK --interval=5m --timeout=5s \
  CMD $ROOT_APPLICATION/healthcheck.sh localhost $PORT || exit 1

, где сценарий healthcheck.sh выполняет следующее

function healthcheck () {
    pt=$2
    port=${pt:-"3000"}
    RES=$(curl -s http://$1:$2/status | jq '.status.online')
    if [ "$RES" == "true" ]; then
        return 0
    else
        return 1
    fi
}
healthcheck $@

Узел API /status возвращает json следующим образом

{
  "status": 
  {
     "online": true
  }
}

Я уверен, что проверка работоспособности верна, поскольку внутри контейнера я могу сделать

# $ROOT_APPLICATION/healthcheck.sh localhost $PORT
# status=$?
# [ $status -eq 0 ] && echo "success" || echo "failed"
success

Также вручную вызывая конечную точку проверки работоспособности:

# curl -s http://localhost:3000/ws/1.0/status| jq '.status.online'
true

, а если я проверяю состояние контейнера, я получаю состояние unhealthy

CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS                         PORTS                              NAMES
d8539fa50a40        my_container         "node --max_old_sp..."   35 minutes ago      Up 35 minutes (unhealthy)      0.0.0.0:3000-3001->3000-3001/tcp   my_image

[ОБНОВЛЕНИЕ]

Вот вывод docker container inspect

    "FinishedAt": "0001-01-01T00:00:00Z",
    "Health": {
        "Status": "unhealthy",
        "FailingStreak": 9,
        "Log": [
            {
                "Start": "2020-03-25T10:11:17.687207876Z",
                "End": "2020-03-25T10:11:17.829283718Z",
                "ExitCode": -1,
                "Output": "rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused \"invalid environment 'NODE_ID'\"\n"

Чтобы воспроизвести эту проблему, вы должны определить docker-compose файл yaml с переменной environment NODE_ID unassigned:

(минимальный файл yaml)

version: '2'
services:
 my_service:
     environment:
        NODE_ID
        NODE_ENV=production

1 Ответ

1 голос
/ 25 марта 2020

Проверка службы показывает результаты проверки работоспособности (и полная проверка также показывает проблему с переменной NODE_ID).

starting container process caused \"invalid environment 'NODE_ID'\"\n

Неназначенный NODE_ID в предоставленном файле compose предполагает, что у вас есть определили эту переменную в среде с помощью команды docker-compose up или docker stack deploy. Вы можете отрегулировать его, чтобы присвоить ему значение по умолчанию:

version: '2'
services:
 my_service:
     environment:
        NODE_ID=${NODE_ID:-undefined}
        NODE_ENV=production

Подробнее об этом синтаксисе см. https://docs.docker.com/compose/compose-file/#variable -подстановка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...