车神ne的博客

.Net技术分享站

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

如何在Docker中部署一个可以被外部访问的Apollo配置中心

  携程Apollo是一个基于Java开发的强大配置中心,提供了基于Docker的快速部署方案:https://github.com/ctripcorp/apollo/wiki/Apollo-Quick-Start-Docker%E9%83%A8%E7%BD%B2

  但是通过官方部署方案部署完成之后,我们会发现,通过浏览器可以访问授权中心8070、8080端口,但是只有在同一网桥内部的程序可以成功获取Apollo中的配置信息,其他服务器或者网桥以外的程序无法成功获取配置需信息。

  通过观察,我发现问题原因如下:Apollo配置中心通过8080端口提供配置获取接口,其接口依赖Spring Eureka,默认情况下,Eureka使用的是网桥中该节点的IP地址端口号,以其他IP地址访问是不被允许的。

  依据该情况,我首先对Apollo提供的docker-compose文件做如下改动:

  1. 为apollo-quick-start容器增加环境变量,配置实例地址为容器所在宿主机IP地址。
  2. 对8090端口做映射,后面会用到。
  3. 为保证容器销毁后数据不丢失,为apollo-db节点增加目录映射,将数据库路径映射到宿主机中

  修改后docker-compose文件如下,高亮部分为个人增加部分:

复制代码
version: '2'

services:
  apollo-quick-start:
    image: nobodyiam/apollo-quick-start
    container_name: apollo-quick-start
   
    environment: 
      EUREKA_INSTANCE_IP_ADDRESS: '192.168.10.151'
    depends_on:
      - apollo-db
    ports:
      - "8090:8090"
      - "8080:8080"
      - "8070:8070"
    links:
      - apollo-db

  apollo-db:
    image: mysql:5.7
    container_name: apollo-db
    environment:
      TZ: Asia/Shanghai
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
    depends_on:
      - apollo-dbdata
    ports:
      - "13306:3306"
    volumes:
      - ./sql:/docker-entrypoint-initdb.d
      - ./data:/var/lib/mysql
    volumes_from:
      - apollo-dbdata

  apollo-dbdata:
    image: alpine:latest
    container_name: apollo-dbdata
    volumes:
      - /var/lib/mysql
复制代码

  修改完成后通过docker-compose启动容器,我们打开,8080端口,会发现此处显示宿主机IP地址,则修改成功:

 

  但是我们通过8070端口,访问Apollo配置中心界面,进入项目配置会发现报错。此时查看管理员工具->系统信息:发现Meta serve,Config Services,Admin Service信息配置不正确。

  这里我们需要通过连接Apollo数据库,修改其中的配置项。修改内容如下:讲数据库ApolloConfigDB中ServerConfig表的Key=eureka.service.url的数据项的Value值改为http://【宿主机IP】:8080/eureka/,将数据库ApolloPortalDB的ServerConfig表中Key=apollo.portal.meta.servers项中value改为{"DEV":"http://【宿主机IP】:8080"}

  修改后,我们通过docker-compose重建Apollo容器,再次打开8070端口,我们会发现一下配置项均为以宿主机IP为根的正确地址:(这里我们可以看到8090端口也必须是宿主机IP,所以前面我把8090端口映射出来)

 

   查看Apollo中所有项目及配置,可正常呈现。则所有配置成功。

posted on   车神ne  阅读(3563)  评论(1编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示