Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docker 使用idoop/docker-apollo镜像,启动后建完项目报“系统出错,请联系系统负责人” #1444

Closed
quezhihui opened this issue Sep 5, 2018 · 34 comments

Comments

@quezhihui
Copy link

image

docker-compose如下,只配置了PRO环境
version: '2'
services:
apollo:
image: idoop/docker-apollo:latest
container_name: apollo
hostname: apollo
network_mode: "host"
volumes:
- ./logs:/opt
environment:
PORTAL_DB: jdbc:mysql://192.xxx.xxx.xxx:3306/ApolloPortalDB?characterEncoding=utf8
PORTAL_DB_USER: oa
PORTAL_DB_PWD: App1234
PRO_DB: jdbc:mysql://192.xxx.xxx.xxx:3306/ApolloConfigDBPro?characterEncoding=utf8
PRO_DB_USER: oa
PRO_DB_PWD: App1234
PRO_CONFIG_PORT: 8050
PRO_ADMIN_PORT: 8051

@nobodyiam
Copy link
Member

看一下portal的日志,看上去是portal没有找到或者连不上admin service。

eureka服务注册有一定延时,所以如果是刚启动完出现这个的话,可以稍等一会儿。

@quezhihui
Copy link
Author

感谢回复,在dockerhub上找到的这个镜像。ApolloPortalDB和ApolloConfigDBPro这两个数据库都执行的初始化sql脚本,但是感觉ApolloConfigDBPro用不上。
重新up了一遍还是这样,是不是docker-compose这个有问题还是数据库需要改一些值

image

@nobodyiam
Copy link
Member

先看一下日志吧

@quezhihui
Copy link
Author

image

@nobodyiam
Copy link
Member

config service和portal启动在同一台机器上?

看看config service有没有起来

@quezhihui
Copy link
Author

这是protal的环境
image
这个是eureka地址

image

@quezhihui
Copy link
Author

idoop/docker-apollo就是集成版的
这是不是少一个服务
image

@quezhihui
Copy link
Author

有三个服务提示启动成功了

@nobodyiam
Copy link
Member

jps -v看一下

@quezhihui
Copy link
Author

quezhihui commented Sep 5, 2018

1

@nobodyiam
Copy link
Member

nobodyiam commented Sep 5, 2018

config service启在8050端口,所以eureka.service.url应该是http://localhost:8050/eureka,pro.meta应该是http://localhost:8050

@quezhihui
Copy link
Author

再问一下pro.meta在哪里改

@nobodyiam
Copy link
Member

看下面的文档,你要配一下PRO_URL

https://github.com/idoop/docker-apollo

PRO_URL: 远程pro服务,格式为http://ip:port 或 domain:port 不可与PRO_DB同时指定,数据库中ServerConfig中eureka.service.url的地址与端口需正确.

@quezhihui
Copy link
Author

嗯,这个我看了。默认PRO_URL是注释的
我配置了PRO_DB应该就不能配置PRO_URL了吧

@nobodyiam
Copy link
Member

建议咨询一下 @idoop

@quezhihui
Copy link
Author

还是读不出环境列表就报错了。

好的,谢谢

@quezhihui
Copy link
Author

问题解决,同时看docker日志3个已经启动,实际上还需要在等待一段时间,具体原因有待探究
docker-compose内容如下
version: '2'
services:
apollo:
image: idoop/docker-apollo:latest
container_name: apollo
hostname: apollo
network_mode: "host"
volumes:
- ./logs:/opt
environment:
PORTAL_DB: jdbc:mysql://192.xxx.xxx.xxx:3306/ApolloPortalDB?characterEncoding=utf8
PORTAL_DB_USER: oa
PORTAL_DB_PWD: App1234
DEV_DB: jdbc:mysql://192.xxx.xxx.xxx:3306/ApolloConfigDBDev?characterEncoding=utf8
DEV_DB_USER: oa
DEV_DB_PWD: App1234
PRO_URL: http://192.xxx.xxx.xxx:8080

@nobodyiam
Copy link
Member

eureka的服务注册有一定延时,应该和这个有关系

@quezhihui
Copy link
Author

使用您写的netcore的demo修改配置文件之后,启动报超时错误
image

但是,我直接在服务器上访问这个地址没有问题的。
image

@nobodyiam
Copy link
Member

报错貌似就是timeout啊,是超时时间设置的太小了吗?

@quezhihui
Copy link
Author

没有设置超时时间,应该是默认的

@xwb2535
Copy link

xwb2535 commented Sep 8, 2018

上面这个问题,我回答一下。同时引发另外一个BUG。1、你上面用了Pro_db就不要用pro_url了,这两个是有冲突的,你打开他的启动文件查看一下就能看懂,他的意思是,Pro_url表示另外新建了一个pro的admin和Config服务,这里通过url就可以引用了,如果又Pro_url就不会判断pro_db参数,如果没有Pro——url就判断如果又pro_db就新建一个服务。我也是用的上面的镜像,采用的其他的都没啥问题,但是我也遇上了上面的错误提示,load env :DEV cluster error.404 Not Found。
首先第一次是能启动的,quick也是能启动的,这个镜像也能启动,但是客户端一直超时,检查之后客户端只识别到了内网的ip,homepageurl是内网的,但是我的服务在云服务器上,无法使用客户端,按照文档要求,需要在jvn注册 -Deureka.instance.homePageUrl=http:// 或者 Deureka.instance.ip-address 这两个jvm参数。所以我在compose.yml environment上加上了这个JAVA_OPTS参数,加上之后,客户端能识别正确的服务器地址了,但是8070网站,没办法配置项目了,提示:系统出错,请联系系统负责人,load env :DEV cluster error.404 Not Found。这应该是什么bug导致,不知道是镜像的bug,还是系统的bug。因为不是java人员,没办法从源码层面排查,希望你们重视一下。

@xwb2535
Copy link

xwb2535 commented Sep 8, 2018

quick-satrt的镜像应该是nobodyiam 你写的,我尝试修改他的demo.sh里面,加上jvm参数,指定Deureka.instance.homePageUrl,也出现了跟idoop的镜像一样的问题。就是要么能启动服务使用,但是只能在局域网内部,因为只识别到了内网Ip,要么增加这个参数,导致portal网站配置出现bug。所以应该不是镜像的问题,应该是代码bug。 1.0.0版本。

@quezhihui
Copy link
Author

这个是不是和consul一个原理?
向consul注册的服务从互联网访问也是这样一个内网地址
image

@idoop
Copy link

idoop commented Sep 9, 2018

抱歉这么晚才看到,下次版本更新的时候我会加上简单的wiki的,这样大家都避免摸索,节省时间。
@xwb2535 @quezhihui 其实是这样的,如果你用了类似PRO_URL这个参数,那么对应环境数据库中的eureka.service.url也应该是这个地址,并且最好配上PRO_IP这个参数。
我这里也用了PRO_URL这个参数,因为PRO环境部署在阿里云上那么对应的ECS会有自己的内网IP,并且需要本地访问,所以绑定了弹性公网IP。通过公网IP访问,这就类似分布式部署了,因为这个IP不是直接在机子上的,所以你必须在PRO环境的服务里指定PRO_IP这个参数,这样就可以实现分布式的管理模式了.
我大致截一段我司的配置:
远程UAT

version: '2'
services:
  apollo-test:
    image: idoop/docker-apollo:1.0.0
    container_name: apollo-uat
    restart: unless-stopped
    network_mode: "host"
    environment:
      UAT_DB: jdbc:mysql://rm-xxx.mysql.rds.aliyuncs.com:3306/ApolloConfigDB?characterEncoding=utf8
      UAT_IP: xxx.xxx.xxx.xxx
      UAT_DB_USER: xx
      UAT_DB_PWD: xxxxx

Pro环境的数据库中的serverconfig表中的servier.url改成与UAT_IP一致,如果有指定端口参数的,记得端口也要一致.
本地Protal配置

version: '2'
services:
  apollo:
    image: idoop/docker-apollo:1.0.0
    UAT_URL: http://xxx.xxx.xxx.xxx:8082

@nobodyiam
Copy link
Member

@xwb2535

回答你的注册内网IP的问题,一般应用都是和配置中心部署在同一个内网的,所以注册内网IP是没问题的。

如果只是本地开发调试需要连接云端配置中心的话,大可不必大费周折配置-Deureka.instance.homePageUrl等来改变注册到注册中心的IP,相反,只需要在本地调试时在客户端指定config service的地址即可,这样会简单很多。

image

@xwb2535
Copy link

xwb2535 commented Sep 10, 2018

@nobodyiam @idoop 谢谢你们的回复。确实不需要在config-service 和admin-service注册 homepageurl参数,我在.net core的appsettings.json里面加上了 Apollo.ConfigService 参数,客户端就能寻址正确了。弄了好久,之前不知道.net的编码规则,源码都是帕斯卡命名法增加参数,当然因为文档上没写明,也不确定这个参数能用。 @quezhihui 加上下面这个参数 就可以使用了。

{
"apollo": {
"AppId": "SampleApp",
"MetaServer": "http://apollo.kad.***.com:8080",
"Apollo.ConfigService": "http://apollo.kad.***.com:8080"
}
}

@nobodyiam
Copy link
Member

@xwb2535 之前是在java版本增加了这个参数,.net版本貌似应该没有支持Apollo.ConfigService配置。。

@xwb2535
Copy link

xwb2535 commented Sep 10, 2018

@nobodyiam 但是我用了,确实就正常了.... 我是下载的源码,不是nuget获取的sdk

@quezhihui
Copy link
Author

quezhihui commented Sep 10, 2018

@nobodyiam
的确,就是本地访问公有云上的apollo配置。代码发布到生产环境是没问题的。
我做测试的就是netcore的demo
远程调试使用了@xwb2535的配置方案是不行的,依旧超时

@xwb2535
Copy link

xwb2535 commented Sep 18, 2018

@idoop 这个docker镜像 https://hub.docker.com/r/idoop/docker-apollo/~/dockerfile/ 开放了所有端口,EXPOSE 80-60000, docker对于容器的管理 比如我用的portainer就卡死了,能修改一下注释行么 # EXPOSE 8070 8080 8081 8082 8083 8090 8091 8092 8093。 另外,我下载了你的git上面的docker-entrypoint的代码来自己生成,但是运运行会又错误,只能用你的镜像,所以还是麻烦你重新上传一下docker。

@idoop
Copy link

idoop commented Sep 19, 2018

@xwb2535 可以了,你重新pull一下。

@xwb2535
Copy link

xwb2535 commented Sep 21, 2018

好的,谢谢

@nobodyiam
Copy link
Member

case先关闭了,如还有问题,可以提供更多信息,或进群交流。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants