一、部署报错常见问题
1、no space left on device
主机上磁盘空间不足导致的,请先排查并清理。学会使用df -h,du --max-depth=1 -h等指令。
1)/acs目录(容器运行时挂载出来的目录)
比如应用指定日志目录为/acs/log(对应主机的/acs/容器id/log),日志文件过大,
找到该容器,docker stop {容器id},删除相关日志
2)/var/lib/docker目录(docker自身文件系统目录),清理docker数据并重启docker
systemctl stop docker
rm -rf /var/lib/docker/ (docker目录,具体看机器,有的指定了docker运行目录为/docker)
systemctl restart docker
同时参考问题2
3)其他目录,看情况清理
2、docker目录占用空间越来越大?docker目录沾满磁盘?删除容器之后也无法释放?
/devicemapper/data文件过大,/var/lib/docker/devicemapper/devicemapper/data,docker的所有镜像、缓存资源都会存储在devicemapper这个目录下,主机上所有容器的数据都会存储到该目录,容器运行过程中这个目录可能会越来越大。
解决方法:
1)主机上清理docker数据,重启docker
systemctl stop docker
rm -rf /var/lib/docker/ (docker目录,具体看机器,有的指定了docker运行目录为/docker)
systemctl restart docker
2)页面上删除属于该机器上的容器,重新添加容器
最佳实践:容器中应用的日志存在volume目录/acs/log中(实际占用的是ECS主机目录/acs/容器id/log),并设置好日志轮转
3、Cannot restart container XXX System error: can't create pivot_root dir , error mkdir,... .read-only file system
容器运行过程中,docker挂载设备I/O异常导致的可读写配置自动更改。需要把容器删除重建
1)主机上docker stop 容器id,docker rm 容器id
2)EWS页面上删除容器,并重新添加
4、上传部署,上传进度一直为0,无法拖拽添加文件等
浏览器缓存问题,清理缓存或者切换隐私模式后重试
5、Error running DeviceCreate,dm_task_run failed
解决方案:
1.登录到容器所在的ECS宿主机,
2.停止docker
systemctl stop docker.service
3.修复docker元数据
thin_check /var/lib/docker/devicemapper/devicemapper/metadata
thin_check --clear-needs-check-flag /var/lib/docker/devicemapper/devicemapper/metadata
4.重启docker
systemctl start docker.service
6、device or resource busy
原因:docker本身存在一定的bug,docker文件系统的命名空间和主机上其他进程的命名空间冲突。
解决方法1:找到并停止设备使用的其他进程(比如定位到是nginx或ntpd等),重新启动容器(暂时解决)
参考: https://blog.csdn.net/o_nikyo_o/article/details/79379107
https://blog.csdn.net/xiaoxiao__cc/article/details/82387999
解决方法2:升级docker版本
docker版本比较低(用户自己安装的),可以考虑升级docker到EWS目前使用的18.09.3版本
7、dial unix /var/run/docker.sock: connect: connection refused
主机上docker文件系统有问题,一般不会遇到,如果出现了,需要清理主机上的docker数据并重启。
systemctl stop docker
rm -rf /var/lib/docker/ (docker目录,具体看机器,有的指定了docker运行目录为/docker)
systemctl restart docker
二、其他部署问题
1、编译部署编译过程出错,如下图:
代码编译过程中出错,请提EWS工单,提供EWS服务名称以及使用的git仓库。
2、编译部署发布过程出错,"执行操作时遇到异常,请稍后重试",如下图
检查项:打包的配置,编译后war包(有且仅有一个)是否在项目根目录/target目录
正确的pom配置示例:
在本地测试打包是这样的,war包在根目录/target目录
错误案例:
一个项目,多个module,每个module的pom打一个war包,编译打包后war包存在根目录/子modul目录/target目录下,编译部署无法通过。问题1,根目录/target目录下找不到war包;问题2,不支持多个war包部署到一个容器中,需要合并进一个war包(一个web module中),或者分成多个应用部署
3、FAIL 轮询指令结果 exit status 1
1)排查是否是上传部署使用的代码包损坏的原因
可以在本地执行unzip解压代码包(从服务列表-历史版本部署下载最新上传的代码包)看下结果,含有"attemption to process anyway"提示的均是代码包异常
2)如果是代码包异常,请重新打包上传
4、FAIL 轮询指令结果 exit status 9
1)排查下是否是open api中代码包的下载有问题,如下载地址访问404 403
2)如果使用的是HTTP上传部署,请尝试使用本地上传部署,先将代码包下载到本地,载上传本地zip包或war包
3)检查代码包是否可以正常解压,本地执行unzip看是否有报错
4)如果不是代码包的问题,请提供机器公网ip和ssh登录的root密码(确保有公网ip以及22端口打开),提交EWS工单处理
5、FAIL 轮询指令结果 net/http:request canceled
1)重新部署试试
2)如果使用的是HTTP上传部署,请尝试使用本地上传部署,先将代码包下载到本地,载上传本地zip包或war包
3)如果重试还是报错,那就需要检查代码问题了。
检查下连接rds,连接redis等,是否能连接畅通。例如排查php error log,或通过(主机上执行)docker logs 容器id查看
6、FAIL 解绑接入层 解除接入层(TENGINX) ac-ac-110 VPC接入层网络初始化中
EWS分配的端口不够使用,后台需要初始化增加端口。请等待3-10分钟后重新部署