Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 是否可以将Dockerfile中的ENV变量与regex或类似的东西(如contains)进行比较?_Bash_Docker_Dockerfile - Fatal编程技术网

Bash 是否可以将Dockerfile中的ENV变量与regex或类似的东西(如contains)进行比较?

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://${

如果正则表达式“*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://${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一无所知)。祝你好运