繁体   English   中英

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

[英]Azure Web App in custom container, env variables not propagated from app service to container

So I've deployed my app to azure app services with custom docker container running on Alpine, but none of the configured environment variables are available in bash when I SSH to it. 应用程序入口点本身可以看到所有变量并且应用程序运行正常。 我能够在微软文档中挖掘的信息说所有配置变量都应该被传递,但不知何故它们不是......欢迎任何建议

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

这是我的 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

这是我的开始脚本

#!/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

这是我的环境配置

[
  {
    "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
  }
]

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

In a default Linux container or a custom Linux container, any nested JSON key structure in the app setting name like ApplicationInsights:InstrumentationKey needs to be configured in App Service as ApplicationInsights__InstrumentationKey for the key name. 换句话说,任何:都应该替换为__ (双下划线)。

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

这是为所有寻求上述答案的人准备的。 在微软支持 session 后问题已解决。

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

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

这是通过在你的 startup.sh 中粘贴下一行来实现的(或者你称之为启动脚本的任何东西)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM