微服务Docker化注册中心网络处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务Docker化注册中心网络处理相关的知识,希望对你有一定的参考价值。
微服务Docker化
docker网络有三种模式,可以在启动时通过--net=来指定
--net=bridge 默认选项,用网桥的方式来连接docker容器。
--net=host docker跳过配置容器的独立网络栈。本质上来说,这个参数告诉docker不去打包容器的网络层。当然,docker 容器的进程仍然被限制在它自己独有的文件系统、进程列表以及其他资源中。一个快速命令 ip addr 将像你展示docker的网络,它是建立在docker 宿主主机上的,有完整的权限去访问宿主主机的网络接口。注意这不意味着docker容器可以去重新配置宿主主机的网络栈,重新配置是需要 --privaleged=true 这个选项参数的,但是这个选项参数会让docker容器打开大量的端口以及其他的系统的超级管理权限的进程。这也会允许容器去访问宿主主机的网络服务,比如 D-bus。这会使docker容器里的进程有有权限去做一些意想不到的事,比如重启你的宿主主机。所以要谨慎使用这个选项参数。
--net=container:NAME_or_ID 告诉docker让这个新建的容器使用已有容器的网络配置。这个新建的容器将配置新的自己的文件系统和进程列表以及其他资源限制,但是将共享这个指定的容器的网络IP地址以及端口号,使得这两个容器可以通过 loopback接口相互访问。
--net=none 告诉docker为新建的容器建立一个网络栈,但不对这个网络栈进行任何配置。
在默认情况下10.120.10.128启动微服务
docker run -tid --name microsrv_error -p 9000:9000 -v /Sioeye/Data/logs/error:/sioeye_apps/logs -v /Sioeye/SioApps/Config/startup_cmd:/sioeye_apps/startup_cmd registry.cn-beijing.aliyuncs.com/sioeye_service_2_0/microsrv_error:8d7035f55a21f1411d732a0cd13b81346fdd4587
遇到问题
启动后会在微服务会向注册中心eureka注册自己的服务,由于默认使用bridge模式故无法获取到宿主机本机IP地址,注册到注册中心的地址就为类似cf67c07884bf:error-collector-server:9000 而不是宿主机IP地址,这样无法通过注册中心查找微服务来进行访问,但是可以直接通过宿主机ip 10.120.10.128:9000来进行访问。
解决这个问题有两个思路:
1、通过--add-host方式或者传递变量将宿主机ip传给docker,docker内微服务使用此地址向eureka注册,但这种方式需要修改各微服务代码;
2、直接使用--net=host 使用宿主机网络。此方式仅需要在docker run的时候添加--net=host参数即可。
解决
重新启动10.120.10.128微服务
docker run -tid --name microsrv_error -p 9000:9000 -v /Sioeye/Data/logs/error:/sioeye_apps/logs -v /Sioeye/SioApps/Config/startup_cmd:/sioeye_apps/startup_cmd --net=host registry.cn-beijing.aliyuncs.com/sioeye_service_2_0/microsrv_error:8d7035f55a21f1411d732a0cd13b81346fdd4587
查看注册中心: 10.120.10.128:error-collector-server:9000 ,此时即可通过注册中心访问微服务。
本文出自 “Kirito” 博客,请务必保留此出处http://aaronchou.blog.51cto.com/8981576/1965565
以上是关于微服务Docker化注册中心网络处理的主要内容,如果未能解决你的问题,请参考以下文章
基于docker部署的微服务架构(二): 服务提供者和调用者