Я столкнулся с досадной проблемой, когда мое контейнерное приложение нормально работает локально, но не удается при развертывании на azure, несмотря на то, что порты открыты правильно.
Подробности:
- azure веб-приложение для контейнера с Linux ОС на компьютере Basi c B1.
- nodejs v12 LTS с сервером express, прослушивающим HTTPS-порт 443. Включает обработчик ошибок HTTP 404 (не найден).
- база данных db Mongodb Atlas в песочнице M0 (бесплатный уровень). Локальные и Azure IP-адреса в белом списке.
- docker контейнер с использованием Dockerfile. нет Kubernetes, нет конфигурационного файла yml.
- docker изображение, размещенное в приватном Docker репозитории-концентраторе, извлечено azure при сборке
Локально работает на Windows 10 x64:
В обоих случаях я получаю ожидаемый результат из моего приложения nodejs :
Running in production on x64
Express HTTPS server listening on port 443
mongo :: connected to database mydb at mydb-tot7b.azure.mongodb.net
(очевидно, myapp и mydb не являются настоящими именами. Используются здесь для удобства.)
Работает в azure:
В разделе «Настройка» -> Настройки приложения:
PORT=443
WEBSITES_PORT=443
DOCKER_ENABLE_CI=true
Конфигурация конвейера, извлекающая docker изображение myrepo/myapp:latest
из частного Docker Репозитория Hub при сборке. Изображение вытащено правильно. Ошибка через https://myapp.azurewebsites.net/ с ошибкой 503 Сервис временно недоступен .
Azure Журнал:
2020-04-10 18:02:21.040 INFO - Pulling image: myrepo/myapp:latest
2020-04-10 18:02:22.128 INFO - latest Pulling from myrepo/myapp
2020-04-10 18:02:22.129 INFO - Digest: sha256:982[...]
2020-04-10 18:02:22.129 INFO - Status: Image is up to date for myrepo/myapp:latest
2020-04-10 18:02:22.131 INFO - Pull Image successful, Time taken: 0 Minutes and 1 Seconds
2020-04-10 18:02:22.143 INFO - Starting container for site
2020-04-10 18:02:22.144 INFO - docker run -d -p 7909:443 --name myapp_0_138f197c -e PORT=80 -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITES_PORT=443 -e WEBSITE_SITE_NAME=myapp -e WEBSITE_AUTH_ENABLED=False -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=myapp.azurewebsites.net -e WEBSITE_INSTANCE_ID=6fc3[...] myrepo/myapp:latest
2020-04-10 18:02:22.144 INFO - Logging is not enabled for this container.Please use https://aka.ms/linux-diagnostics to enable logging to see container logs here.
2020-04-10 18:02:23.473 INFO - Initiating warmup request to container myapp_0_138f197c for site myapp
2020-04-10 18:02:45.304 INFO - Waiting for response to warmup request for container myapp_0_138f197c. Elapsed time = 21.8308149 sec
[...]
2020-04-10 18:06:08.252 INFO - Waiting for response to warmup request for container myapp_0_138f197c. Elapsed time = 224.7791547 sec
2020-04-10T18:02:24.893958779Z Running in production on x64
2020-04-10T18:02:26.275376640Z Express HTTPS server listening on port 80
2020-04-10T18:02:26.601261213Z mongo :: connected to database mydb at mydb-tot7b.azure.mongodb.net
2020-04-10 18:06:14.346 ERROR - Container myapp_0_138f197c for site myapp did not start within expected time limit. Elapsed time = 230.8732099 sec
2020-04-10 18:06:14.365 ERROR - Container myapp_0_138f197c didn't respond to HTTP pings on port: 443, failing site start. See container logs for debugging.
2020-04-10 18:06:14.427 INFO - Stoping site myapp because it failed during startup.
Почему контейнерное приложение запускается правильно, как видно из журнала azure, но контейнер не отвечает на HTTP-пинг на 443, который отображается как в dockerfile, так и в azure с помощью PORT и WEBSITES_PORT?
Нужно ли заставить мой HTTPS-сервер явно отвечать на HTTP PING и, если да, как мне это сделать?
Dockerfile:
FROM node:12
WORKDIR /usr/src/myapp
COPY package*.json ./
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
RUN npm install
COPY . .
EXPOSE 443
CMD [ "node", "app.js" ]
Возможно, эта проблема решена дубликат, но я предоставляю гораздо более актуальную информацию, по сравнению с большинством вопросов ниже. Кроме того, я потратил значительное время на устранение неполадок, и ни один из этих соответствующих ресурсов, похоже, не помог: