Веб-приложение для контейнера Docker запущено, но также истекло время ожидания - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть приложение узла, работающее на localhost: 3000, и я хочу развернуть его публично.Сделать это, запустив внутри ВМ и используя переадресацию портов, было легко, но я борюсь с докером и развертыванием контейнера.

Я только что отправил новый образ контейнера в мое частное хранилище Docker с помощью docker-compose push, и в моем веб-приложении Azure включено непрерывное развертывание.Журналы показывают, что оно автоматически запускает образ с подкомандой docker run в веб-приложении автоматически, как и ожидалось.

Требуется очень много времени для запуска моего приложения в контейнере, и к тому времени, как оно запускается, времяout, и Azure, кажется, завершает его.

Мои параметры env, необходимые для запуска приложения, были вручную введены в настройках приложения на портале Azure для веб-приложения.

2018_09_18_RD00155D258812_default_docker.log:
2018-09-18T00:14:27.228360304Z   level: 'info',
2018-09-18T00:14:27.228366005Z   label: 'app/server.js',
2018-09-18T00:14:27.228370005Z   timestamp: '2018-09-18T00:14:27.226Z',
2018-09-18T00:14:27.228374605Z   [Symbol(level)]: 'info' }
2018-09-18T00:14:27.844023142Z { message: 'createdQueue; results = {"name":"webhook-queue-dev","approximateMessageCount":1,"created":false}',
2018-09-18T00:14:27.844050643Z   level: 'debug',
2018-09-18T00:14:27.844055943Z   label: 'data-controllers/azure-queue.js',
2018-09-18T00:14:27.844060543Z   timestamp: '2018-09-18T00:14:27.843Z',
2018-09-18T00:14:27.844065044Z   [Symbol(level)]: 'debug' }

2018_09_18_RD00155D258812_docker.log:
2018-09-18 00:14:10.809 INFO  - Starting container for site
2018-09-18 00:14:10.809 INFO  - docker run -d -p 18365:80 --name webhook-web-app_0 -e WEBSITE_SITE_NAME=webhook-web-app -e WEBSITE_AUTH_ENABLED=False -e PORT=80 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_INSTANCE_ID=123 -e HTTP_LOGGING_ENABLED=1 jtara1/webhook  

2018-09-18 00:18:04.705 ERROR - Container webhook-web-app_0 for site webhook-web-app did not start within expected time limit. Elapsed time = 230.8677441 sec

docker-compose.yml

version: '3'

services:
  webhook:
    image: jtara1/webhook
    build:
      context: .
      dockerfile: Dockerfile
    command: node server.js
    volumes:
      - .:/app
      - /app/node_modules/
    expose:
      - "3000"
      - "80"
    ports:
      - "3000:80"

Dockerfile

FROM node:8-alpine

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

# Expose our server port.
EXPOSE 3000 80

# Run our app.
CMD ["node", "server.js"]

Я тестирую тот же образ контейнера на локальном хосте с

   $ docker-compose up -d
   $ docker-compose exec webhook sh
   > wget localhost:3000
   $ docker-compose logs
   $ docker-compose down

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Я столкнулся с подобной проблемой в приложении Docker на основе Java.

Оказалось, что в Azure по умолчанию установлен тайм-аут на 230 секунд для развертывания контейнеров Docker, но его можно легко переопределить в настройках приложения с помощью клавиши WEBSITES_CONTAINER_START_TIME_LIMIT. Просто установите для него более высокое значение, то есть 600 (= 10 минут). Обратите внимание, что максимальное значение составляет 1800 секунд.

Источник: https://docs.microsoft.com/en-us/azure/app-service/containers/app-service-linux-faq

0 голосов
/ 24 сентября 2018

Наконец-то разобрались с моими проблемами и ошибками в настройке портов, переадресации портов, имен хостов и переменных 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"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...