问题说明

通过docker起的Nacos可以在本地调试环境成功注册服务。

但是用Maven将每个服务打包以后,通过docker拉起每个服务无法在Nacos中成功注册。

image-20250927194432356

Docker容器编排

1.先启动Nacos和Mysql服务

#docker-compose.env.yml
version: '3'
​
services:
  mysql:
    image: mysql:8.0
    container_name: quizplanet-mysql
    environment:
      MYSQL_ROOT_PASSWORD: CNUCIE123
      TZ: Asia/Shanghai
    ports:
      - "3306:3306"
    volumes:
      - ./mysql-data:/var/lib/mysql
      - ./mysql-init:/docker-entrypoint-initdb.d
    restart: always
    networks:
      - mynetwork
​
  nacos:
    image: nacos/nacos-server:v2.4.2
    container_name: quizplanet-nacos
    ports:
      - "8848:8848"
      - "8849:8849"
      - "9848:9848"
      - "9849:9849"
    volumes:
      - ./nacos-data:/home/nacos/data
    environment:
      MODE: standalone
      NACOS_AUTH_ENABLE: false        # 关掉鉴权
      NACOS_AUTH_TOKEN_ENABLED: false # 2.4+ 新增,显式禁掉 token
      PREFER_HOST_MODE: hostname
      TZ: Asia/Shanghai
      NACOS_CONSOLE_UI_ENABLED: true
    networks:
      - mynetwork
​
networks:
  mynetwork:
    driver: bridge
​
​

2.再启动其余业务服务

#docker-compose.service.yml
version: '3'
services:
  service-user:
    container_name: quizplanet-user
    build:
      context: ./services/service-user
      dockerfile: Dockerfile
    ports:
      - "58000:8000"
    networks:
      - mynetwork
    restart: unless-stopped
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - TZ=Asia/Shanghai
​
​
​
​
​
  service-question:
    container_name: quizplanet-question
    build:
      context: ./services/service-question
      dockerfile: Dockerfile
    ports:
      - "9000:9000"
    networks:
      - mynetwork
    restart: unless-stopped
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - TZ=Asia/Shanghai
​
​
  service-ann:
    container_name: quizplanet-ann
    build:
      context: ./services/service-ann
      dockerfile: Dockerfile
    ports:
      - "9010:9010"
    networks:
      - mynetwork
    restart: unless-stopped
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - TZ=Asia/Shanghai
​
  service-wrong:
    container_name: quizplanet-wrong
    build:
      context: ./services/service-wrong
      dockerfile: Dockerfile
    ports:
      - "9020:9020"
    networks:
      - mynetwork
    restart: unless-stopped
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - TZ=Asia/Shanghai
​
  service-eng:
    container_name: quizplanet-eng
    build:
      context: ./services/service-eng
      dockerfile: Dockerfile
    ports:
      - "9030:9030"
    networks:
      - mynetwork
    restart: unless-stopped
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - TZ=Asia/Shanghai
​
  service-stat:
    container_name: quizplanet-stat
    build:
      context: ./services/service-stat
      dockerfile: Dockerfile
    ports:
      - "9040:9040"
    networks:
      - mynetwork
    restart: unless-stopped
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - TZ=Asia/Shanghai
​
  service-file:
    container_name: quizplanet-file
    build:
      context: ./services/service-file
      dockerfile: Dockerfile
    ports:
      - "9050:9050"
    networks:
      - mynetwork
    restart: unless-stopped
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - TZ=Asia/Shanghai
​
  gateway:
    container_name: quizplanet-gateway
    build:
      context: ./gateway
      dockerfile: Dockerfile
    ports:
      - "80:80"
    networks:
      - mynetwork
    restart: unless-stopped
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - TZ=Asia/Shanghai
​
networks:
  mynetwork:
    external: true

DockerFile(以service-user为例)

FROM eclipse-temurin:21-jdk-jammy
​
WORKDIR /app
​
COPY target/service-user-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8000
ENTRYPOINT ["java", "-jar", "/app/app.jar", "--spring.profiles.active=prod"]

applicatoin-prod.properties(以service-user为例)

spring.application.name=service-user
server.port=8000
​
spring.cloud.nacos.server-addr=nacos:8848
​
# 数据源
spring.datasource.url=jdbc:mysql://mysql:3306/quizplanet_user?useSSL=false&serverTimezone=UTC&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=CNUCIE123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
​
# MyBatis
mybatis.mapper-locations=classpath:mapper/user/*.xml
mybatis.type-aliases-package=com.quizplanet.user.bean
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐