Наконец-то разобрались с моими проблемами и ошибками в настройке портов, переадресации портов, имен хостов и переменных env между приложением моего узла, док-контейнером и конфигурацией веб-приложения Azure.
Я не осознавал, что тег для каждой сборки докера должен совпадать с именем удаленного хранилища докера.
Благодаря примеру из статьи, приведенной в комментариях выше, я понял, что мое приложение в моем контейнере докера должно быть доступно на localhost в той же среде оболочки для локального тестирования. то есть docker build -t jtara1/wh .
id=$(docker run -p 80:3000 jtara1/wh)
curl localhost
должен выводить что-то вроде «Hello World» или что-либо еще, что возвращается в ответе вашего приложения из корневого индекса для тестирования. Раньше я docker exec -it $id sh
(эффективно осуществлял удаленный доступ к своему локальному контейнеру) затем получал ответ от приложения, которое находилось там, что позже вызвало у меня путаницу. Наконец, docker push jtara1/wh
Я заметил в журналах докера, что Azure использует докер для запуска моего контейнера с использованием некоторой переадресации порта, такой как docker run -p 53600:80 jtara1/wh
, которая указывает, что контейнер докера доступен через порт 53600 и перенаправляет этот трафик на порт 80 (предположительно, мое приложение узла). Но мне нужно было определить env var, PORT, как порт, который использует приложение моего узла, по умолчанию PORT = 80; (В статье, приведенной выше, предполагается, что WEBSITES_PORT - это env var, который веб-приложения Azure используют для определения порта, на котором размещено мое приложение).
Традиционно в linux vm я размещаю на $ hostname -I
и публично обращаюсь к нему по общедоступному ip vm. В моем приложении я использую 0.0.0.0 вместо обычного localhost, поэтому он доступен через docker
Я изо всех сил пытался эффективно управлять своими чувствительными переменными (иногда и не в этом выпуске), которые требовались приложению, в то же время пытаясь избежать необходимости управлять, реорганизовывать или обновлять их более чем в одном месте. В итоге я просто ввел их вручную в настройках приложения веб-приложения, поскольку сейчас их меньше 18.
Я закончил тем, что переключился на использование dockerfile без docker-compose.yml, поскольку этого было достаточно для этого развертывания.
FROM node:8-alpine
RUN mkdir /app
WORKDIR /app
ADD package.json /app/
RUN npm install
ADD . /app/
EXPOSE 80
CMD ["node", "server.js", "--host", "0.0.0.0"]