我很难找到可以在其中设置docker run传递给我的自定义docker映像的自定义环境变量的位置。 我的映像从这些环境变量读取配置。
⚠请勿编辑此部分。
@timmydo感谢您的反馈。 我们正在积极调查,并将尽快与您联系。
嗨@timmydo-我今天将对此进行调查,并分享所有相关发现。 只是为了澄清一下,在将自定义映像上传到Azure容器注册表之前,是否不使用ENV
在Dockerfile
设置环境变量? 另外,如果您还没有看到以下文档,请查看它们:
在容器实例中设置环境变量
https://docs.microsoft.com/zh-CN/azure/container-instances/container-instances-using-azure-container-registry
从Azure容器注册表部署到Azure容器实例
https://docs.microsoft.com/zh-CN/azure/container-instances/container-instances-environment-variables
感谢您的链接。 我认为它们可能更适合独立运行容器。 在我的场景中,我正在Web应用程序服务内运行一个容器,因此无法使用其中一些命令。 (我猜想Web应用程序服务会启动我的容器并将HTTP请求转发到其上的端口80)
我没有在dockerfile中设置env vars,因为我的dockerfile已签入公共git存储库,并且我不想在其中放置秘密。 我想我可以通过使用环境变量创建另一个秘密dockerfile来解决该问题,但是将其放入azure门户(也许在azure Web应用程序设置部分中)会更方便。
@timmydo是的,在公开回购中绝对不理想。 因此,通过应用程序设置定义的配置值(键,值对)将在应用程序运行时以environment
变量的形式提供给您的应用程序,而不是在部署期间。 您可以在Dockerfile
使用Azure Key Vault
服务来获取配置值,但是您仍需要在Dockerfile中公开tenant_id
, subscription_id
等(除非您可以选择将它们定义为单独的env
文件,该文件不会签入您的仓库中。
如此说来,请查看以下文档,其中讨论了使用VSTS定义自定义部署(构建过程)到Web App for Containers:
为什么使用单独的发行版定义而不是Web App for Containers中可用的自动部署功能?
https://docs.microsoft.com/zh-cn/vsts/build-release/apps/cd/deploy-docker-webapp?view=vsts
该文档链接到一个文档,该文档告诉您如何使用VSTS构建容器,但是该文档解释了如何使用VSTS步骤构建容器,却没有提及有关处理机密/环境变量的任何内容。 用于构建docker映像的VSTS任务需要将dockerfile检入到存储库中。
在运行docker build步骤之前,我可能有一个内嵌的powershell脚本在某处生成dockerfile,但这似乎是一种hack。 我认为这主要是码头工人的错
也许替代方法是在azure门户的Web应用程序中使用kubernetes pod yaml定义来定义环境变量,但是我找不到关于它的任何好文档。 似乎不适合放置配置,因为我认为这些pod定义在源代码管理中更有意义。
谁是提出功能请求以允许将env vars传递给Azure门户中的docker run命令的合适人选?
@neilpeterson会对此有任何见解吗? 我知道从技术上讲它是一个Web应用程序文档,但它涉及到容器,因此认为可能值得一问
我本人未使用过Web应用程序,但是快速扫描文档显示,使用CLI时可以使用--settings
。
--settings WEBSITES_PORT=8000
在门户网站上,我看不到实现这一目标的非常直接的方法。 正如@timmydo指出的那样,看起来我们可以使用Docker Compose或Kubernetes清单文件,两者都可以解决问题。
因此,这样的撰写文件应该可以工作(我已经确认)。
version: '3'
services:
demo-env:
image: microsoft/sample-aks-helloworld
container_name: aks-helloworld
environment:
TITLE: test-environment-var
就是说,我还希望有一些更基本的东西,类似于--settings
CLI参数。
@ SyntaxC4和对此有何想法?
@timmydo我们使用azure cli设置了应用程序设置变量来解决了这个问题。 所有这些变量最终都在已启动的docker cmd / entrypoint的环境中。 例如
az webapp config appsettings set --name webapp-name --resource-group dev --settings DB_NAME = dbname DB_HOST = ourhost.database.windows.net DB_USER = dbuser DB_PASSWD = passwd WEBSITES_ENABLE_APP_SERVICE_STORAGE = true
因此,至少它们不在源代码控制中。
@saschwarz我不认为azure应用程序设置会传递给容器Web应用程序的docker run
命令中的-e
选项吗?
@timmydo也许我们正在谈论在Azure中运行Docker容器的不同方法? 在容器的WebApps中,我不会发出docker run
。 我将图像推送到我们的私有Azure注册表中,在带有门户的WebApp实例中选择标记(或通过Azure cli),并使用注入到环境中的应用程序设置来部署/运行它:
@timmydo请在Azure反馈站点上提交功能请求,以便社区可以对该功能进行投票,并且我们的产品团队可以进行审核以供将来实施。
现在,我们将关闭该线程。 如果对此问题还有其他疑问,请重新打开它,我们将继续讨论。
这个主题正是我过去几天一直在搜索的内容。 最后,我对stackoverflow提出了一个问题(https://stackoverflow.com/questions/50681821/deploy-azure-webapp-with-custom-container-environment-variables),以得到我的问题的答案。
我的解决方法还使用了docker-compose文件,但是使用docker-compose还无法使用ACR图像。
同样的问题在这里。 现在,我只想说:愚蠢的天蓝色!
嗨,大家好,
关于此主题的任何解决方法?,我们在2019年面临相同的问题,同时试图通过App Service,Web App for Container或Azure中的简单Containers将环境变量(参数)传递给我的私有Docker映像...它总是相同的失败输出
在应用程序服务的sectuon设置中的“配置”标签下使用应用程序设置。 每个应用程序设置都作为env变量传递到容器。
我们仍然看到一个问题,即从ACR中拉出的容器中的.nercore应用无法从Azure门户中的应用服务中获取应用设置。 正如文档所建议的,这些值不会在运行时自动注入。
我觉得能够将环境变量添加到docker run
命令是一个非常基本且必不可少的功能。
我不感到惊讶,Azure再次将琐碎的事情变成了一个问题,这使我花了很长时间才能解决。
我们使用应用程序设置将变量注入自定义docker映像和docker compose应用程序已有5个月了,没有任何问题...
当我尾随我的容器的log stream
时,我可以看到为旋转容器而运行的实际命令。 虽然它确实包含以下ENV_VARS
,但仍缺少我设置为应用程序设置的那些设置。
docker run -d -p 7312:80 --name container_name -e WEBSITES_ENABLE_APP_SERVICE_STORAGE=false -e WEBSITE_SITE_NAME=appservice-name -e WEBSITE_AUTH_ENABLED=False -e PORT=80 -e WEBSITE_ROLE_INSTANCE_ID=0 -e WEBSITE_HOSTNAME=appservice-name.azurewebsites.net -e WEBSITE_INSTANCE_ID=INSTANCE_ID -e HTTP_LOGGING_ENABLED=1 repo.azurecr.io/container:tag
似乎环境变量是在入口点运行时注入的,但之后便无法访问了。 太烦人了。
部署后遇到相同的问题,无法使其重新联机。 产量下降了5个小时
最有用的评论
同样的问题在这里。 现在,我只想说:愚蠢的天蓝色!