0

我正在尝试通过 dockerfile 在运行时将 ENV vars 传递给我entrypoint.sh的 docker 容器的启动文件()。ENV 变量来自 azure devops 管道中的密钥库。

我似乎无法通过简单的docker run -e YUMMY_USER=$(MY_USER) -e YUMMY_PASSWORD=$(MY_PW) yummyAppImage. 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但登录服务根本看不到参数。

也许我的语法不正确?任何帮助将不胜感激。谢谢!

4

3 回答 3

1

引用你的变量。这些不带引号的字符串中的特殊字符将由运行命令的 shell 解释:

#!/bin/sh
set -e

az login --service-principal --username "$YUMMY_USER" --password "$YUMMY_PASSWORD"
dotnet /app/YummyApp.dll

exec "$@"

并且在你的docker run命令中也取决于你的shell:

docker run \
  -e 'YUMMY_USER=exampleuser12983#$23' \
  -e 'YUMMY_PASSWORD=examplepw(*&876' \
  YummyAppImage
于 2020-02-26T14:20:22.560 回答
0

请在 dockerfile 中定义 ENV 变量

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
MAINTAINER YummyLumpkins <yummy@lumpkins.com>

ENV YUMMY_USER default
ENV YUMMY_PASSWORD default
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"]
于 2020-02-26T13:25:34.537 回答
0

尝试使用单引号运行环境变量:

docker run \
  -e 'YUMMY_USER=exampleuser12983#$23' \
  -e 'YUMMY_PASSWORD=examplepw(*&876' \
  YummyAppImage
于 2020-02-26T14:42:41.253 回答