gpt4 book ai didi

bash - 是否可以将Dockerfile中的ENV变量与正则表达式或包含之类的类似内容进行比较?

转载 作者:行者123 更新时间:2023-12-02 19:45:42 24 4
gpt4 key购买 nike

我想检查我的VERSION参数,如果正则表达式“。* feature。*”在其中包含“功能”的版本中找到确切的字符串,以生成条件docker镜像。
dockerfile现在看起来像这样:

FROM docker.INSERTURL.com/fe/plattform-nginx:1.14.0-01
ARG ARTIFACTORY_USER
ARG ARTIFACTORY_PW
ARG VERSION

# Download sources from Repository
ADD https://${ARTIFACTORY_USER}:${ARTIFACTORY_PW}@INSERTURL.com/artifactory/api/npm/angular.npm/angular-frontend-app/-/angular-frontend-app-${VERSION}.tgz app.tar.gz

# Extract and move to nginx html folder
RUN tar -xzf app.tar.gz
RUN mv ./package/dist/angular-frontend-app/* /usr/share/nginx/html

# Start nginx via script, which replaces static urls with environment variables
ADD start.sh /usr/share/nginx/start.sh
RUN chmod +x /usr/share/nginx/start.sh

# Overwrite nginx.conf
ADD nginx.conf /etc/nginx/nginx.conf

# Fix permissions for runtime
RUN chmod 777 /var/log/nginx /usr/share/nginx/html

CMD /usr/share/nginx/start.sh
如果VERSION名称中不包含“功能”,我希望它仅从Artifactory下载源。
我想它看起来像这样:
FROM docker.INSERTURL.com/fe/plattform-nginx:1.14.0-01
ARG ARTIFACTORY_USER
ARG ARTIFACTORY_PW
ARG VERSION

if [ "$VERSION" = ".*feature.*" ]; then
# Download sources from Repository
ADD https://${ARTIFACTORY_USER}:${ARTIFACTORY_PW}@INSERTURL.com/artifactory/api/npm/angular.npm/angular-frontend-app/-/angular-frontend-app-${VERSION}.tgz app.tar.gz
fi

# Extract and move to nginx html folder
RUN tar -xzf app.tar.gz
RUN mv ./package/dist/angular-frontend-app/* /usr/share/nginx/html

# Start nginx via script, which replaces static urls with environment variables
ADD start.sh /usr/share/nginx/start.sh
RUN chmod +x /usr/share/nginx/start.sh

# Overwrite nginx.conf
ADD nginx.conf /etc/nginx/nginx.conf

# Fix permissions for runtime
RUN chmod 777 /var/log/nginx /usr/share/nginx/html

CMD /usr/share/nginx/start.sh
您知道吗,是否可以使用regex检查Dockerfile ARG和ENV?

最佳答案

Dockerfile中没有条件。您可以在一个RUN步骤中运行任意的Shell代码,但这与您所获得的尽可能接近。
如果您的基本镜像具有HTTP客户端(例如curl),则可以构建组合命令:

RUN if [ $(expr "$VERSION" : '.*feature.*') -eq 0 ]; then \
curl -o app.tar.gz https://${ARTIFACTORY_USER}:${ARTIFACTORY_PW}@INSERTURL.com/artifactory/api/npm/angular.npm/angular-frontend-app/-/angular-frontend-app-${VERSION}.tgz \
&& tar -xzf app.tar.gz \
&& mv ./package/dist/angular-frontend-app/* /usr/share/nginx/html \
&& rm -r app.tar.gz package \
; fi
( expr 调用尝试将 $VERSION与该正则表达式匹配,并且不存在任何 \(...\)匹配组,返回匹配的字符数;如果regexp不匹配,则为零。)
您还可以考虑将多个Dockerfile用于不同的变体,或者具有一个安装了此前端应用程序的中间镜像,然后动态选择最终镜像的 FROM行。还要记住,对于最终获得构建图像的任何人,这些凭据将在图像的 docker history中以明文形式可见。

关于bash - 是否可以将Dockerfile中的ENV变量与正则表达式或包含之类的类似内容进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63413534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com