Как установить порт приложения Azure-функции из переменной docker -e? - PullRequest
2 голосов
/ 03 апреля 2019

Я пытаюсь создать прослушиватель очереди Azure в Docker и развернуть его как функцию Azure.

Azure запускает мой докер с командой, подобной следующей:

docker run -d -p 16506:8081 --name queue-listener_0 -e PORT=8081 ... 

Единственное, что мне нужно сделать, это получить эту переменную порта и поместить ее в поле func start --port $PORT в сценарии точки входа, но проблема в том, что bash не видит переменные, введенные через ключ -e.

Dockerfile:

FROM tarampampam/node:10.10-alpine as buildContainer


COPY package.json package-lock.json entrypoint.sh host.json extensions.csproj proxies.json /app/
COPY /QueueTrigger/function.json /app/
#COPY /app/dist /app/dist

### only for local launch
#COPY  /local.settings.json /app


WORKDIR /app

RUN npm install
COPY . /app
RUN npm run build

FROM mcr.microsoft.com/azure-functions/node:2.0
WORKDIR /app
ENV AzureWebJobsScriptRoot=/app
ENV AzureWebJobs_ExtensionsPath=/app/bin

# Copy dependency definitions
COPY --from=buildContainer /app/package.json /app/

# Get all the code needed to run the app
COPY --from=buildContainer /app/dist /app/
COPY --from=buildContainer /app/function.json /app/QueueTrigger/
COPY --from=buildContainer /app/bin /app/bin
COPY --from=buildContainer /app/entrypoint.sh /app
COPY --from=buildContainer /app/host.json /app
COPY --from=buildContainer /app/extensions.csproj /app
COPY --from=buildContainer /app/proxies.json /app
COPY --from=buildContainer /app/resources /app/resources

### only for local launch
#COPY --from=buildContainer /app/local.settings.json /app


RUN chmod 755 /app/entrypoint.sh
COPY --from=buildContainer /app/node_modules /app/node_modules
RUN npm i -g azure-functions-core-tools@core --unsafe-perm true
RUN apt-get update && apt-get install -y ghostscript && gs -v

# Serve the app
ENTRYPOINT ["sh", "entrypoint.sh"]

Entrypoint:

#!/bin/bash

func start --port $PORT

1 Ответ

1 голос
/ 05 апреля 2019

func больше для местного развития.

Образ mcr.microsoft.com/azure-functions/node:2.0 уже имеет среду выполнения, упакованную с точкой входа по умолчанию, установленной для его запуска. Вам действительно не нужно func здесь.

Но , если потребуется, даже с помощью только времени выполнения, вы можете настроить порт

  1. Вы должны были бы удалить эти последние несколько строк из контейнера
RUN chmod 755 /app/entrypoint.sh
RUN npm i -g azure-functions-core-tools@core --unsafe-perm true

# Serve the app
ENTRYPOINT ["sh", "entrypoint.sh"]
  1. И запусти свой контейнер вот так
docker run -d -p 16506:8081 --name queue-listener_0 -e ASPNETCORE_URLS=http://+:8081 ... 

Обратите внимание, что local.settings.json не будет подхвачено во время выполнения. Настройки вашего приложения должны быть установлены вручную как переменные среды.

...