【问题标题】:Pass ENV var through 'docker run -e MY_VAR=value' to entrypoint.sh?通过 'docker run -e MY_VAR=value' 将 ENV var 传递给 entrypoint.sh?
【发布时间】: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(*&amp;876 YummyAppImage 但登录服务根本看不到参数。

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

【问题讨论】:

  • 是否有可能代替myusermypassword 的值包含需要转义的特殊字符?
  • @PeterEmil 是的,它们确实有特殊的价值。不知道我会如何逃避这些,因为它们本身被作为变量从密钥库中拉入。 . .
  • 那么您是自己在命令外壳中输入用户名和密码,还是通过此密钥库将它们设置为环境变量?
  • @PeterEmil 他们是来自 keyvault 的 ENV 变量。 . .我应该在我的帖子中更具体,我现在会更新它。感谢您指出这一点!

标签: docker docker-compose dockerfile containers docker-entrypoint


【解决方案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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-30
        • 2019-04-03
        • 2015-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-11
        相关资源
        最近更新 更多