原文由底层穷人发表于TesterHome社区。点击原文链接,直接与作者交流。背景公司目前维护的测试工具平台,前端有时需要更新。更改前端Vue项目后,需要执行npmrunbuild打包整个项目,然后将打包好的整个项目复制到后端项目中。步骤非常繁琐,不符合前后端分离的思路;为此,考虑使用Nginx来部署前端项目,后期可以配合rancher进行CICD。Dockerfile详解#Buildmirroringbasedononbuild_vue:v1imageFROMharbor.bluemoon.com.cn/lw/onbuild_vue:v1ASbuilder#切换到/app工作目录WORKDIR/app#复制package.json到app目录COPY包。json./#执行npm命令RUNnpmconfigsetregistryhttps://registry.npm.taobao.org/&&\npminstall#将当前目录下的所有文件复制到app目录COPY../#执行npmrunbuild命令RUNnpmrunbuild:prod#基于nginx构建镜像:alpinemirroringFROMnginx:alpine#声明80端口。只声明角色,如果dockerrun-P会指定端口EXPOSE80#从stagenamedbuilder,复制打包文件到/usr/share/nginx/html/COPY--from=builder/app/dist/usr/share/nginx/html/#删除原来的默认配置RUNrm/etc/nginx/conf.d/default.conf#从builder阶段,复制nginx配置文件到/etc/nginx/conf.d/COPY--from=builder/app/nginx.conf/etc/nginx/conf.d/pit1--npmrunbuild打包失败报错:ERRORValidationError:Invalidconfiqurationobiect。已使用与API模式不匹配的配置对象初始化对象。排错过程:先把下面的命令注释掉,然后重建镜像。build完之后在里面执行npmrunbuild命令,发现还是出现上面的错误,继续排查#commandcollectiondockerbuild-tdemo:v1.dockerrun-itddemo:v1shdockerpsdockerexec-it6ce3793827c3sh直接进入镜像,先执行gitclone命令下载项目,然后执行npminstall&npmrunbuild相关命令,发现打包编译成功#commandsetnpmconfigsetregistryhttps://registry.npm.taobao.org/npminstallnpmrunbuild:prod猜测:本地项目中的node_module是否受影响?先删除本地项目中的node_module试试;这确实是删除它的好方法。结论:因为Dockerfile中的命令一开始已经是npminstall,里面已经有node_module了,但是COPY命令复制的是本地的node_module,相当于覆盖,所以编译永远不会成功。镜像无法在rancher上运行,报错:standard_init_linux.go:211:execuserprocesscaused"execformaterror"排查过程:本地运行正常,但在服务器上运行不了。试试某首歌某bing搜索,可以找到类似postdockerrunningcontainererrorstandard_init_linux.go:211:execuserprocesscaused"execformaterror"可能的解决方案硬件架构不兼容。在amd和arm架构下构建的图像可能无法相互通信。解决方案:针对不同的硬件架构构建不同的镜像,或者构建一个跨架构(multi-arch)的镜像。shell执行不兼容。脚本可能是基于bash编写的,不同的shell解释器不兼容,有些Linux发行版可能没有bash,或者默认的shell解释器不是bash。解决方法:在shell脚本的开头指定要使用的解释器,比如#!/bin/bash,注意使用的语法。非*NIX环境有换行符。例如,一些在Windows环境下编写的代码,移植到Linux环境下可能会出现问题。解决方法:将CRLF换成LF猜测:打包机是M1芯片,ARM架构,所以很有可能是硬件架构不兼容,导致无法运行?我在服务器(AMD架构)上打包了一个新的镜像,然后对比了两个镜像的信息,发现了一些猫腻#commandsetdockerrun-itd-p8080:80demo:v2dockerpsdockerinspectimage_id结论:M1是ARM架构,docker拉取或FROM时,默认下载ARM架构的镜像。它是基于FROM镜像构建的。也必须是AMD架构的镜像解决方案:#使用如下命令构建满足运行要求的镜像版本。dockerbuildxbuild--platform=linux/amd64。-tdemo:v2#buildx目前支持的平台架构dockerbuildxls打包后的镜像踩了两个大坑,Vue镜像的部署终于完成了!!!综上所述,遇到陷阱不要害怕。学会使用搜索引擎寻找解决方案,但你仍然无法解决它们。最好在一些交流群里请教各位高手~解决掉坑之后,把解决过程记录下来。记性不好不如文笔不好~原文由底层穷人发布在TesterHome社区。点击原文链接,直接与作者交流。今天的知识已经领完啦~想了解更多测试开发前沿技术:欢迎来到“第十届MTSC上海大会”>>>1个主会场+11个专场,大咖云集,精英云集
