简介

此前通过docker部署nacos时,使用一个docker-compose.yaml文件同时启动,相关.env文件正确配置即可直接使用。这次在服务器上已经有了一个mysql容器,所以就将nacos中数据源配置为了已存在的mysql容器,结果在启动时出现了No DataSource set错误

原因

两个容器均通过docker-compose部署

两个容器分别启动,如果不配置networds会自动创建一个默认网络,就早造成了两个容器,不在同一个网络下,就会出现No DataSource set错误

解决

使用命令docker network create xxxx提前创建一个网络,并在两个docker-compose.yaml文件中指定networks并配置为外部网络

  • 注意:
    • nacos配置文件中mysql的IP地址应为容器的ip的地址;
    • 防火墙对应端口要打开
    • 加入.bashrc中可直接使用查询容器的ip
function docker_ip() {
    sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' $1
}


function docker_composer_ip(){
   docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $1
}
  • nacos.env
PREFER_HOST_MODE=172.22.0.2 # 容器ip
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=mysql
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=root
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&serverTimezone=UTC
  • docker-compose-mysql.yaml
version: "2.2"
services: 
  mysql:
    restart: always
    image: mysql:5.7.16
    container_name: mysql-server
    volumes:
      - /data/mysql/db:/var/lib/mysql
      - /data/mysql/logs:/var/log/mysql
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=root
    networks:
      - xxxx
networks:
  xxxx:
    external: true

  • docker-compose-nacos.yaml
version: "2"
services:
  nacos:
    image: nacos/nacos-server:2.0.3
    container_name: nacos
    env_file:
      - ./env/nacos-standlone-mysql.env
    volumes:
      - ./standalone-logs/:/home/nacos/logs
      - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9555:9555"
    restart: always
    networks:
      - xxxx
networks:
  xxxx:
    external: true

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐