Docker 实践问题汇总

【问题1】 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

—————————————

【解决】 没有启动 docker 服务,执行启动docker服务 


【问题2】 Job for docker.service failed because the control process exited with error code. See “systemctl status docker.service” and “journalctl -xe” for details

—————————————

【解决】 Docker启动异常的可能原因:

  • 1、内存不够:Docker 启动至少需要2G内存,首先执行free -mh命令查看剩余内存是否足够
  • 2、端口冲突:该docker监听端口已经被其他进程占用,一般此种问题容易出现在新部署的服务,或在原有机器上部署新的后台服务,所以在部署之前应该执行命令检查端口是否已经被占用,如果上线后发现占有则应改为可用端口再重启之。

【问题3】 默认配置下,如果在 CentOS 使用 Docker CE 看到下面的这些警告信息: WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled

—————————————

【解决】 请添加内核配置参数以启用这些功能。

然后重新加载 sysctl.conf 即可 $ sudo sysctl -p

【问题4】docker容器中没有vim工具

—————————————

【解决】
首先检查这个镜像是基于什么系统


现在docker-hup上大部分都是基于Debian linux构建的,主要是因为这个Debian系统内核比较小。可以通过执行如下命令完成vim安装。

【docker 使用注意事项】

1、制作镜像尽量避免使用docker commit命令,原因这样制作的镜像像一个黑盒操作,开发人员不知道里面具体改动了那些内容。 docker commit 可以用于被攻击后记录轨迹
2、docker run 宿主机端口:docker虚拟机端口 注意:在冒号前面的端口为宿主机的端口,后面的为虚拟机端口
3、强烈建议将容器加入自定义的 Docker 网络来连接多个容器,而不是使用 –link 参数。
4、使用docker image prune 可以清除无用的虚悬镜像
5、docker run –name 最好使用name参数配置,给启动的docker镜像起一个名字,否则docker每次回自动给其命名,且每次的名字不 一样。


【dockerfile 编写注意事项】

1、使用dockerfile制作docker镜像时,同类命令尽量使用&&拼接,减少创建的镜像层数,提高镜像创建速度 注意:docker最大镜像层数127
2、dockerfile中记录使用的cmd命令,会被docker run 后面的执行的命令覆盖
3、dockerfile中ADD命令可以实现自动解压的效果。注意,虽然ADD和COPY都可以复制文件,但建议只有在需要对复制文件进行自动解压时使用add。

Docker使用国内镜像加速器

使用daocloud 中的国内加速器

在docker上执行上命令,当执行成功后,会自动在/etc/docker/目录下添加daemon.json和key.json

如果生效的话,需要重启docker服务

systemctl restart docker

【参考资料】
https://www.daocloud.io/mirror#accelerator-doc

Tomcat重启脚本

由于近期用jenkin发版的时候,发现其中重启tomcat发布服务功能总是不能正常生效,所以我想在jenkin中调用自己写的一段shell脚本来完成重启tomcat的工作

 

Eclipse在Debug模式时启动超慢

【问题描述】

开始的时候项目还可以使用debug启动,而且时间也不长,后来不知道为什么调整了wait timeout 为1000,也没起来

【原因分析】

这个问题可能是由于eclipse和tomcat的交互而产生的,在以debug模式启动tomcat时,发生了读取文件错误,eclipse自动设置了断点,导致tomcat不能正常启动。

【解决方法 】

以debug模式启动tomcat,打开breakpoints veiw,右键-> Remove all,重启下tomcat就OK了

上传文件大小导致失败

【问题场景】 在本地开发环境,上传超过2MB的数据都可以成功上传至服务器。但是,在测试环境出现上传超过200K就会失败的问题。 前端使用的是springMVC,中间件使用Nginx + Tomcat

【排查方法】 1、检查不同环境下的spring配置文件中,上传文件大小限制

两个环节的代码都是同样的配置,没有问题,排查spring问题

2、检查两个环境的tomcat配置 conf/server.xml

当maxPostSize<=0时,POST方式上传的文件大小不会被限制。配置一致,排除tomcat配置问题, 注意:maxPostSize参数只有当request的Content-Type为“application/x-www-form-urlencoded”时起作用。 参考资料 https://blog.csdn.net/lafengwnagzi/article/details/72846195

3、检查两个环境的nginx配置

最终发现,测试环境的nginx配置不一致导致,问题定位成功 参考资料 https://blog.csdn.net/bruce128/article/details/9665503

【总结】 需要问题不要着急,先自查,从自己的代码入手。如果代码确认没有问题,就外范围扩大,看一下外部环境是否存在问题,一般情况都可以准确定位。