docker-compose可以方便组合多个 docker 容器服务, 但是, 当容器服务之间存在依赖关系时, docker-compose 并不能保证服务的启动顺序。docker-compose 中的 depends_on 配置是容器的启动顺序, 并不是容器中服务的启动顺序。本章将详细叙述如何解决 docker-compose 顺序启动微服务的问题。
成都创新互联主要为客户提供服务项目涵盖了网页视觉设计、VI标志设计、营销型网站建设、网站程序开发、HTML5响应式重庆网站建设公司、手机网站制作、微商城、网站托管及成都网站维护、WEB系统开发、域名注册、国内外服务器租用、视频、平面设计、SEO优化排名。设计、前端、后端三个建站步骤的完善服务体系。一人跟踪测试的建站服务标准。已经为成都混凝土搅拌罐车行业客户提供了网站营销服务。
1.用restart:always机制
docker-compose.yml
2. 用shell脚本阻止当前服务启动,直到所需依赖的服务全部启动之后再启动当前服务。
部署的微服务如下图所示
(1) shell脚本 :entrypoint.sh ( 镜像中必须安装 netcat要么通过maven配置要么在dockefile安装netcat )
这个脚本有2 个参数:
-d: 需要等待的服务和端口,例如: simonEureka:8080
-c: 等待的服务和端口启动之后, 自己的启动命令,例如: java -jar eureka.jar
(2)编写docker-compose.yml
(3) 编写每个jar包的Dockerfile文件
Dockerfile-eureka:
Dockerfile-config(其他的类似):
netcat放在同级目录下
(4) 启动服务
$ docker-compose up
其他程序都在等待eureka启动这样就实现了顺序启动的功能
注意问题:
1. Shell脚本权限问题(不能执行shell脚本):
docker: Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"docker-entrypoint.sh\": executable file not found in $PATH": unknown.
解决方法(添加权限)
chmod +x docker-entrypoint.sh
2. Shell脚本 报错"start.sh /bin/bash^M: 坏的解释器:没有那个文件或目录”,因为 .sh文件是从windows拷贝过来的,所以多了\r
解决办法
sed -i 's/\r$//' start.sh
3. 出现网关不能no host to root
先关闭防火墙看是否能解决
4. 关闭防火墙后会出现NO chain需要重启docker
生产环境文件上传服务发现经常报错:
Failed to parse multipart servlet request; nested exception is java.lang.RunTimeException
提示上传文件的临时路径找不到.
在linux系统中,springboot应用服务在启动(java -jar 命令启动服务)的时候,会在操作系统的/tmp目录下生成一个tomcat*的文件目录,上传的文件先要转换成临时文件保存在这个文件夹下面。
由于临时/tmp目录下的文件,在长时间(10天)没有使用的情况下,就会被系统机制自动删除掉。
在项目配置文件中自定义临时文件路径
@Bean
MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
File tmpDirFile = new File(tempDir);
// 判断文件夹是否存在
if (!tmpDirFile.exists()) {
//创建文件夹
tmpDirFile.mkdirs();
}
factory.setLocation(tempDir);
return factory.createMultipartConfig();
}
linux下启动服务的方式:
#service file restart || servicer file start
linux下停止服务的方式:
#service file stop
linux下查看服务的方式:
#service file status
以上是最常用的方式,同样你也可以通过/etc目录下的相关文件进行状态操作;而对于停止服务也可以利用进程号的方式kill进程;
如果在终端不适应情况下还可以进行桌面操作,进入系统应用中的服务菜单,就可以对相关服务进行管理和控制。
启动直接点开机键就可以。
重启reboot 就可以了。
关机,init3、shutdown -f now、halt 都可以关机。
重启服务services 服务 restart。
停止服务services 服务 stop。
开始服务services 服务 start。
服务状态services 服务 status。
扩展资料:
常用命令及技巧:通用命令。
1、date :打印或者设置系统的日期和时间
2、 stty -a:可以查看或者打印控制字符(Ctrl-C、Ctrl-D、 Ctrl-Z等)
3、 passwd:用passwd -h查看
4、logout,login: 登录shell的登录和注销命令
5、 more, less, head tail: 显示或部分显示文件内容
6、 lp/lpstat/cancel, lpr/lpq/lprm: 打印文件
7、 chmod u+x:更改文件权限
8、 rm -fr dir:删除非空目录
9、cp -R dir:拷贝目录
10、 fg jobid :可以将一个后台进程放到前台
参考资料来源:百度百科-linux
微服务以jar包的形式部署到linux测试环境时,为了方便管理,我写了几个shell脚本
启动服务,只需要将jar包作为参数即可