【发布时间】:2020-02-26 10:59:08
【问题描述】:
我正在尝试通过 dockerfile 在运行时将 ENV vars 传递给我的 docker 容器的启动文件 (entrypoint.sh)。 ENV 变量来自 azure devops 管道中的密钥库。
我似乎无法通过简单的docker run -e YUMMY_USER=$(MY_USER) -e YUMMY_PASSWORD=$(MY_PW) yummyAppImage 传递 ENV 变量。 vars 用于登录授权服务。应该注意的是,来自密钥保管库的用户和密码都包含特殊字符。我的 dockerfile 看起来像这样:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
MAINTAINER YummyLumpkins <yummy@lumpkins.com>
WORKDIR /app
COPY . ./
RUN dotnet restore
RUN dotnet publish YummyApp -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
COPY entrypoint.sh ./
RUN dos2unix entrypoint.sh && chmod +x entrypoint.sh
CMD ["/app/entrypoint.sh"]
我的 shell 脚本文件如下所示:
#!/bin/sh
set -e
az login --service-principal --username $YUMMY_USER --password $YUMMY_PASSWORD
dotnet /app/YummyApp.dll
exec "$@"
我尝试在docker run 命令中手动传入 ENV 变量,如下所示:
docker run -e YUMMY_USER=exampleuser12983#$23 -e YUMMY_PASSWORD=examplepw(*&876 YummyAppImage 但登录服务根本看不到参数。
也许我的语法不正确?任何帮助将不胜感激。谢谢!
【问题讨论】:
-
是否有可能代替
myuser或mypassword的值包含需要转义的特殊字符? -
@PeterEmil 是的,它们确实有特殊的价值。不知道我会如何逃避这些,因为它们本身被作为变量从密钥库中拉入。 . .
-
那么您是自己在命令外壳中输入用户名和密码,还是通过此密钥库将它们设置为环境变量?
-
@PeterEmil 他们是来自 keyvault 的 ENV 变量。 . .我应该在我的帖子中更具体,我现在会更新它。感谢您指出这一点!
标签: docker docker-compose dockerfile containers docker-entrypoint