通过 'docker run -e MY_VAR=value' 将 ENV var 传递给 entrypoint.sh?

Pass ENV var through 'docker run -e MY_VAR=value' to entrypoint.sh?

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

我似乎无法通过简单的 docker run -e YUMMY_USER=$(MY_USER) -e YUMMY_PASSWORD=$(MY_PW) yummyAppImage 传递 ENV 变量。 vars 用于登录授权服务。应该注意的是,来自密钥库的用户和密码都包含特殊字符。我的 docker 文件如下所示:

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# -e YUMMY_PASSWORD=examplepw(*&876 YummyAppImage 但登录服务根本看不到参数。

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

请在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"]

引用你的变量。这些字符串中没有引号的特殊字符将由 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#' \
  -e 'YUMMY_PASSWORD=examplepw(*&876' \
  YummyAppImage

尝试 运行 带单引号的环境变量:

docker run \
  -e 'YUMMY_USER=exampleuser12983#' \
  -e 'YUMMY_PASSWORD=examplepw(*&876' \
  YummyAppImage