Bash 是否可以将Dockerfile中的ENV变量与regex或类似的东西(如contains)进行比较?
如果正则表达式“*feature.*”在版本中找到包含“feature”的确切字符串,我想检查我的VERSION参数,以生成条件docker映像 dockerfile现在看起来像这样:Bash 是否可以将Dockerfile中的ENV变量与regex或类似的东西(如contains)进行比较?,bash,docker,dockerfile,Bash,Docker,Dockerfile,如果正则表达式“*feature.*”在版本中找到包含“feature”的确切字符串,我想检查我的VERSION参数,以生成条件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://${
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
我希望它只从Artifactory下载源代码,如果版本名称中不包含“feature”
我想是这样的:
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
您知道吗,如果可以使用正则表达式检查Dockerfile ARGs和env?您可以在运行时执行if+curl命令,这应该可以执行您可以在运行时执行if+curl命令,这应该可以执行Dockerfile中没有条件。您可以在一个
run
步骤中运行任意shell代码,但这是您所能做到的
如果您的基本映像具有类似于curl
的HTTP客户端,则可以构建一个组合命令:
在[$(expr“$VERSION”:“.*功能。*')-eq 0]时运行;然后\
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前端应用程序/*/usr/share/nginx/html\
&&rm-r app.tar.gz包\
; fi
(调用尝试将$VERSION
与该正则表达式匹配,如果没有任何\(…\)
匹配组,则返回匹配的字符数;如果regexp不匹配,则返回零。)
您还可以考虑使用多个DoCKFr档用于不同的变体,或者使用安装了这个前端应用程序的中间图像,然后动态地从行中选择<代码>作为最终图像。还请记住,这些凭证将在映像的
docker历史记录中以明文形式显示给最终获得生成映像的任何人。docker文件中没有条件。您可以在一个run
步骤中运行任意shell代码,但这是您所能做到的
如果您的基本映像具有类似于curl
的HTTP客户端,则可以构建一个组合命令:
在[$(expr“$VERSION”:“.*功能。*')-eq 0]时运行;然后\
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前端应用程序/*/usr/share/nginx/html\
&&rm-r app.tar.gz包\
; fi
(调用尝试将$VERSION
与该正则表达式匹配,如果没有任何\(…\)
匹配组,则返回匹配的字符数;如果regexp不匹配,则返回零。)
您还可以考虑使用多个DoCKFr档用于不同的变体,或者使用安装了这个前端应用程序的中间图像,然后动态地从行中选择<代码>作为最终图像。还请记住,这些凭证将在图像的
docker历史记录中以明文形式显示给最终获得构建图像的任何人。优秀的first Q!在将来,要意识到,对于你的问题来说,用最少的代码来证明问题就足够了。但是请继续发帖。(对docker一无所知)。祝你好运优秀的第一Q!在将来,要意识到,对于你的问题来说,用最少的代码来证明问题就足够了。但是请继续发帖。(对docker一无所知)。祝你好运