Docker是一个开源的应用容器引擎,将应用以及依赖打包到一个可移植的镜像中,部署到服务器并运行在container容器实例中。


阿里云容器镜像服务提供Docker镜像仓库托管,配置项目代码Git仓库和构建规则,轻松实现自动化。把实际使用中遇到的几个问题总结出来,供大家分享参考


构建失败,错误信息:curl: (7) Failed to receive SOCKS5 connect request ack. {"exitCode":1, "message":"get repo info failed, "}

image.png

解决:手动触发”立即构建“

原因:纯属猜测,阿里云容器镜像服务访问Github有时不稳定,偶发问题。


一直显示”构建中“

原因某些命令如apt update; apt install -y npm要从国外服务器下载较多文件,速度较慢,实际使用中经历的最长构建时间超过1小时。


RUN mvn package失败,mvn not found

解决:使用命令RUN sh mvnw package

原因:Maven版本和插件兼容性问题。另一个解决方案是apt install maven,不一定能解决问题。


RUN mvn package失败[ERROR] Some problems were encountered while processing the POMs

解决:使用命令RUN sh mvnw package

原因:Maven版本和插件兼容性问题。

mvnw是何方神圣?全名MavenWrapper,是一个第三方提供的Maven插件,为SpringBoot项目提供一个独立的且指定版本的Maven,不影响全局版本和其他项目。在生成SpringBoot项目时已经自动安装。


SpringBoot项目下有两个文件mvnw和mvnw.cmd,还有一个.mvn目录下面有三个文件。

Spring-boot-project

├── .mvn

│   └── wrapper

│       ├── maven-wrapper.jar

│       └── maven-wrapper.properties

│       ├── MavenWrapperDownloader.java

├── mvnw

├── mvnw.cmd


单独安装时可以在项目根目录下运行命令:

mvn -N io.takari:maven:wrapper


也可以指定maven版本:

mvn -N io.takari:maven:wrapper -Dmaven=3.3.3


使用时和mvn类似,比如:./mvnw clean package


RUN mv ./dist /usr/share/gninx/html,得到的目录结构不正确

/usr/share/nginx/html

├── dist

│   └── index.html

│   └── favicon.png

解决:使用命令RUN mv ./dist/* /usr/share/nginx/html

原因:目标文件夹已经存在。


启动Docker容器时运行launch.sh错误,Permission denied

解决:CMD或者ENTRYPOINT命令指定shell,CMD ["sh", "launch.sh"]

原因:*.sh文件没有正确设置可执行权限,可以执行chmod +x *.sh。如果使用Windows开发环境,建议使用指定shell的解决方案。