nacos-group / nacos-docker

This project contains a Docker image meant to facilitate the deployment of Nacos .
1.4k stars 901 forks source link

使用 docker stack deploy 部署时报 No DataSource Set !!! #138

Closed JL-Code closed 3 years ago

JL-Code commented 3 years ago

使用 docker stack deploy 部署时报 No DataSource Set

docker-compose.yml 配置文件:

version: "3.3"
services:
  nacos:
    image: nacos/nacos-server:1.3.2
    environment:
      - PREFER_HOST_MODE=hostname
      - MODE=standalone
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_DB_NAME=nacos_config
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=nacos
      - MYSQL_SERVICE_PASSWORD=nacos
    volumes:
      - nacos_logs:/home/nacos/logs
    networks:
      - nacos
    ports:
      - 8848:8848
    depends_on:
      - mysql
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - "node.labels.type==middleware"

  mysql:
    image: nacos/nacos-mysql:8.0.16
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=nacos_config
      - MYSQL_USER=nacos
      - MYSQL_PASSWORD=nacos
    volumes:
      - nacos_mysql:/var/lib/mysql
    networks:
      - nacos
    ports:
      - "3306:3306"
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints:
          - "node.labels.type==middleware"

volumes:
  nacos_mysql: {}
  nacos_logs: {}
networks:
  nacos:
    driver: overlay
    attachable: true

nacos.log 日志:

    at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167),
    at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:91),
    at com.mysql.cj.NativeSession.connect(NativeSession.java:152),
    at com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:849),
    ... 24 more,
Caused by: java.net.UnknownHostException: mysql,
    at java.net.InetAddress.getAllByName0(InetAddress.java:1281),
    at java.net.InetAddress.getAllByName(InetAddress.java:1193),
    at java.net.InetAddress.getAllByName(InetAddress.java:1127),
    at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:132),
    at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:65),
    ... 26 more,
2020-11-11 12:57:33,877 WARN [WatchFileCenter] start close,
,
2020-11-11 12:57:33,877 WARN [WatchFileCenter] already closed,
,
2020-11-11 12:57:33,877 WARN [NotifyCenter] Start destroying Publisher,
,
2020-11-11 12:57:33,877 WARN [NotifyCenter] Destruction of the end,
,
2020-11-11 12:57:33,877 ERROR Nacos failed to start, please see /home/nacos/logs/nacos.log for more details.,
,
2020-11-11 12:57:33,886 INFO ,
,
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.,
,
2020-11-11 12:57:33,887 ERROR Application run failed,
,
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'configOpsController' defined in URL [jar:file:/home/nacos/target/nacos-server.jar!/BOOT-INF/lib/nacos-config-1.3.2.jar!/com/alibaba/nacos/config/server/controller/ConfigOpsController.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'externalDumpService': Invocation of init method failed; nested exception is ErrCode:500, ErrMsg:Nacos Server did not start because dumpservice bean construction failure :,
No DataSource set,
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:769),
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:218),
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1308),
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1154),
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538),
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498),
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320),
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222),
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318),
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199),
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:846),
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:863),
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546),
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142),
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775),
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397),
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:316),
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260),
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248),
    at com.alibaba.nacos.Nacos.main(Nacos.java:35),
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
    at java.lang.reflect.Method.invoke(Method.java:498),
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49),
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:109),
    at org.springframework.boot.loader.Launcher.launch(Launcher.java:58),
    at org.springframework.boot.loader.PropertiesLauncher.main(PropertiesLauncher.java:466),
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'externalDumpService': Invocation of init method failed; nested exception is ErrCode:500, ErrMsg:Nacos Server did not start because dumpservice bean construction failure :,
No DataSource set,
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:139),
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization(AbstractAutowireCapableBeanFactory.java:419),
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1737),
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:576),
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498),
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320),
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222),
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318),
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199),
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:273),
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1237),
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1164),
    at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:857),
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:760),
    ... 27 common frames omitted,
Caused by: com.alibaba.nacos.api.exception.NacosException: Nacos Server did not start because dumpservice bean construction failure :,
No DataSource set,
    at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:202),
    at com.alibaba.nacos.config.server.service.dump.ExternalDumpService.init(ExternalDumpService.java:50),
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62),
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),
    at java.lang.reflect.Method.invoke(Method.java:498),
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:363),
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:307),
    at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:136),
    ... 40 common frames omitted,
Caused by: java.lang.IllegalStateException: No DataSource set,
    at org.springframework.util.Assert.state(Assert.java:73),
    at org.springframework.jdbc.support.JdbcAccessor.obtainDataSource(JdbcAccessor.java:77),
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:371),
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:452),
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:462),
    at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:473),
    at org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:480),
    at com.alibaba.nacos.config.server.service.repository.extrnal.ExternalStoragePersistServiceImpl.findConfigMaxId(ExternalStoragePersistServiceImpl.java:553),
    at com.alibaba.nacos.config.server.service.dump.processor.DumpAllProcessor.process(DumpAllProcessor.java:51),
    at com.alibaba.nacos.config.server.service.dump.DumpService.dumpConfigInfo(DumpService.java:259),
    at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:171),
    ... 48 common frames omitted,

nacos 容器内的环境变量

JVM_XMN=1g
MODE=standalone
HOSTNAME=35b7b4e14b16
NACOS_USER=nacos
TERM=xterm
JVM_MMS=320m
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
JVM_XMX=2g
JVM_XMS=2g
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
JAVA=/usr/lib/jvm/java-1.8.0-openjdk/bin/java
MYSQL_SERVICE_USER=nacos
PWD=/home/nacos
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
TIME_ZONE=Asia/Shanghai
MYSQL_SERVICE_PASSWORD=nacos
TOMCAT_ACCESSLOG_ENABLED=false
BASE_DIR=/home/nacos
NACOS_DEBUG=n
SHLVL=1
HOME=/root
CLUSTER_CONF=/home/nacos/conf/cluster.conf
JVM_MS=128m
MYSQL_SERVICE_PORT=3306
CLASSPATH=.:/home/nacos/conf:
SPRING_DATASOURCE_PLATFORM=mysql
FUNCTION_MODE=all
PREFER_HOST_MODE=hostname
MYSQL_SERVICE_HOST=mysql
MYSQL_SERVICE_DB_NAME=nacos_config
_=/usr/bin/env

有个奇怪的现象: 当 MYSQL_SERVICE_HOST 改为节点 IP 地址后,就可以正常启动,但是使用 mysql 服务名时则无法连接到 mysql

glacier0315 commented 3 years ago

在安装好Docker后,结果没有网络,经过排查发现是没有开启ip转发。正常情况下,Docker会自动开启地址转发。但是,不知道为什么Docker在Centos8中没有开启iptables的地址转发,需要我们使用firewalld防火墙管理工具来手动开启IP地址转发功能。 检查iptables 接下来会清除iptables现有规则,如果你一直使用的是firewalld来管理你的防火墙,就没必要查看现有的iptbales规则了。 iptabels -L 临时关闭firewalld和docker服务 systemctl stop firewalld docker 清除现有防火墙规则 由于docker启动容器时会在iptables中添加规则,我们先把原来 iptables -P INPUT ACCEPT 先放行规则,非常重要! 否则22端口也就是你的SSH服务可能再也连不上了。 iptables -F 清除所有规则 开启端口转发 1、开启内核IP地址转发功能 首先查看内核是否开启IP地址转发功能 cat /proc/sys/net/ipv4/ip_forward 返回为1已开启,返回0则需要手动开一下。 echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf 复制到终端上!以root用户身份执行。 sysctl -p 使更改立即生效。 2、防火墙放行IP地址转发 现在将firewalld服务启动 systemctl start firewalld 默认情况下firewalld会禁止转发流量,可以执行firewall-cmd --query-masquerade查看状态,应该是no,请执行下面的命令开启转发。 firewall-cmd --add-masquerade --permanent 永久开启IP地址转发 firewall-cmd --reload 重载防火墙规则,使之生效