自定义容器中的 Azure Web App,环境变量未从应用服务传播到容器

Jer*_*haw 7 containers environment-variables azure docker azure-web-app-service

因此,我已将我的应用程序部署到 azure 应用程序服务,并使用在 Alpine 上运行的自定义 docker 容器,但是当我通过 SSH 连接到 bash 时,所有配置的环境变量都不可用。应用程序入口点本身可以​​看到所有变量并且应用程序正确运行。我能够在微软文档中挖掘到的信息说所有配置变量都应该被传递下来,但不知何故它们不是......欢迎任何建议

是一篇类似于我的问题的帖子,但它也没有提供任何解决方案。

这是我的 dockerfile


# pull official base image
FROM python:3.7-alpine AS build-python

# Copy over and install requirements files
RUN mkdir requirements

COPY requirements/production.txt /requirements/
COPY requirements/common.txt /requirements/
COPY ./requirements.txt /
RUN pip wheel --no-cache-dir --no-deps --wheel-dir /wheels -r requirements.txt

FROM python:3.7-alpine

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV DEBUG 0
ENV DJANGOENV staging

# install psycopg2
RUN apk update \
    && apk add --virtual build-deps pkgconfig python3-dev openssl-dev libxml2-dev libxslt-dev libffi-dev musl-dev make gcc \
    && apk add postgresql-dev \
    && pip install psycopg2

RUN apk add openssh \
     && echo "root:Docker!" | chpasswd
COPY sshd_config /etc/ssh/

RUN /usr/bin/ssh-keygen -A

EXPOSE 2222
EXPOSE 80
EXPOSE 8000

COPY --from=build-python /wheels /wheels
COPY --from=build-python requirements .
COPY --from=build-python requirements.txt .
RUN pip install --no-cache /wheels/*

RUN apk del build-deps

# set work directory
WORKDIR /app

# copy project
COPY . .

# add and run as non-root user
#RUN adduser -D myuser
#USER myuser

# run server
CMD sh start_azure_server.sh
Run Code Online (Sandbox Code Playgroud)

这是我的开始脚本

#!/bin/sh

echo "Starting ssh daemon!!!"
/usr/sbin/sshd

echo "Collecting static and starting server!!!"

python manage.py collectstatic --noinput &&
daphne flexitkt.asgi:application -b 0.0.0.0 -p $PORT --proxy-headers
python manage.py rqworker
Run Code Online (Sandbox Code Playgroud)

这是我的环境配置

[
  {
    "name": "AWS_ACCESS_KEY",
    "value": "*****************",
    "slotSetting": false
  },
  {
    "name": "AWS_REGION",
    "value": "eu-north-1",
    "slotSetting": false
  },
  {
    "name": "AWS_SECRET_KEY",
    "value": "**********",
    "slotSetting": false
  },
  {
    "name": "CKEDITOR_CLOUDSERVICE_UPLOAD_TOKEN",
    "value": "*************",
    "slotSetting": false
  },
  {
    "name": "CKEDITOR_CLOUDSERVICE_UPLOAD_URL",
    "value": "*************",
    "slotSetting": false
  },
  {
    "name": "CKEDITOR_CLOUDSERVICE_WS_URL",
    "value": "**************",
    "slotSetting": false
  },
  {
    "name": "CKEDITOR_ENVIRONMENT_ID",
    "value": "*************",
    "slotSetting": false
  },
  {
    "name": "CKEDITOR_SECRET_KEY",
    "value": "***************",
    "slotSetting": false
  },
  {
    "name": "DATABASE_URL",
    "value": "postgres://*************:#############@**************.postgres.database.azure.com:5432/*******",
    "slotSetting": false
  },
  {
    "name": "DJANGOENV",
    "value": "staging",
    "slotSetting": false
  },
  {
    "name": "DOCKER_REGISTRY_SERVER_PASSWORD",
    "value": "***********",
    "slotSetting": false
  },
  {
    "name": "DOCKER_REGISTRY_SERVER_URL",
    "value": "https://index.docker.io",
    "slotSetting": false
  },
  {
    "name": "DOCKER_REGISTRY_SERVER_USERNAME",
    "value": "*******",
    "slotSetting": false
  },
  {
    "name": "EPI_SERVER_URL",
    "value": "*******************",
    "slotSetting": false
  },
  {
    "name": "FLEXIT_PAY_BAMBORA_ACCESS_TOKEN",
    "value": "*********",
    "slotSetting": false
  },
  {
    "name": "FLEXIT_PAY_BAMBORA_MD5_KEY",
    "value": "*******",
    "slotSetting": false
  },
  {
    "name": "FLEXIT_PAY_BAMBORA_MERCHANT_NUMBER",
    "value": "********",
    "slotSetting": false
  },
  {
    "name": "FLEXIT_PAY_BAMBORA_SECRET_TOKEN",
    "value": "*************",
    "slotSetting": false
  },
  {
    "name": "FLEXITKT_CAMPAIGNS_SUBDOMAIN",
    "value": "campaign-staging",
    "slotSetting": false
  },
  {
    "name": "FLEXITKT_CUSTOMERS_SUBDOMAIN",
    "value": "account-staging",
    "slotSetting": false
  },
  {
    "name": "FLEXITKT_MAIN_SUBDOMAIN",
    "value": "internt-staging",
    "slotSetting": false
  },
  {
    "name": "FLEXITKT_SITE_DOMAIN",
    "value": "*******************",
    "slotSetting": false
  },
  {
    "name": "FLEXITKT_USE_SUBDOMAINS",
    "value": "False",
    "slotSetting": false
  },
  {
    "name": "GOOGLE_API_URL_KEY",
    "value": "**********************",
    "slotSetting": false
  },
  {
    "name": "HERE_API_ACCESS_KEY_ID",
    "value": "******************",
    "slotSetting": false
  },
  {
    "name": "HERE_API_ACCESS_KEY_SECRET",
    "value": "*********************",
    "slotSetting": false
  },
  {
    "name": "HERE_MAPS_API_KEY",
    "value": "*********************",
    "slotSetting": false
  },
  {
    "name": "MICROSOFT_AUTH_CLIENT_ID",
    "value": "*******************",
    "slotSetting": false
  },
  {
    "name": "MICROSOFT_AUTH_CLIENT_SECRET",
    "value": "**********************",
    "slotSetting": false
  },
  {
    "name": "MICROSOFT_AUTH_REDIRECT_URL",
    "value": "*********************",
    "slotSetting": false
  },
  {
    "name": "MICROSOFT_FILE_PICKER_REDIRECT_URI",
    "value": "**********************",
    "slotSetting": false
  },
  {
    "name": "PORT",
    "value": "8000",
    "slotSetting": false
  },
  {
    "name": "PRODUCTS_SITE_URL",
    "value": "*************",
    "slotSetting": false
  },
  {
    "name": "REDIS_URL",
    "value": "***********************",
    "slotSetting": false
  },
  {
    "name": "S3_BUCKET_NAME",
    "value": "******************",
    "slotSetting": false
  },
  {
    "name": "SECRET_KEY",
    "value": "***********************",
    "slotSetting": false
  },
  {
    "name": "SEND_TO_ONLY_ALLOWED_ADDRESSES",
    "value": "True",
    "slotSetting": false
  },
  {
    "name": "SIEMENS_CLOUD_PASSWORD",
    "value": "**********************",
    "slotSetting": false
  },
  {
    "name": "SIEMENS_CLOUD_SUBSCRIPTION_KEY",
    "value": "***********************",
    "slotSetting": false
  },
  {
    "name": "SIEMENS_CLOUD_TENANT_ID",
    "value": "******************************",
    "slotSetting": false
  },
  {
    "name": "SIEMENS_CLOUD_USERNAME",
    "value": "******************************",
    "slotSetting": false
  },
  {
    "name": "WEBSITE_HTTPLOGGING_RETENTION_DAYS",
    "value": "10",
    "slotSetting": false
  },
  {
    "name": "WEBSITES_ENABLE_APP_SERVICE_STORAGE",
    "value": "false",
    "slotSetting": false
  },
  {
    "name": "WEBSITES_PORT",
    "value": "8000",
    "slotSetting": false
  }
]
Run Code Online (Sandbox Code Playgroud)

Jer*_*haw 12

这是为所有寻求上述问题答案的人提供的。在与 Microsoft 进行支持会话后,问题已得到解决。

我仍然不明白为什么微软似乎众所周知的一个重要问题在他们的文档或任何教程中都没有详细介绍,但我们在这里......

由于 docker 容器基本上包装在另一个接收环境变量的容器中,因此您必须“手动”或者,也许更好地将环境从外部容器复制到内部容器

这是通过将下一行粘贴到startup.sh(或您所谓的启动脚本)中来实现的

eval $(printenv | sed -n "s/^\([^=]\+\)=\(.*\)$/export \1=\2/p" | sed 's/"/\\\"/g' | sed '/=/s//="/' | sed 's/$/"/' >> /etc/profile)
Run Code Online (Sandbox Code Playgroud)


Nan*_*ong 0

请检查您是否在Azure应用服务的应用设置中以正确的格式编辑了环境变量。

在默认 Linux 容器或自定义 Linux 容器中,应用程序设置名称中的任何嵌套 JSON 密钥结构(例如 ApplicationInsights:InstrumentationKey)都需要在应用服务中将密钥名称配置为 ApplicationInsights__InstrumentationKey。换句话说,any:应替换为__(双下划线)。

参考:https://learn.microsoft.com/en-us/azure/app-service/configure-common#add-or-edit