【Spring-Cloud】nacos的docker-compose部署

本文介绍如何使用Docker Compose部署Nacos,并分享了在部署过程中遇到的问题及解决方法。

以前nacos是用的脚本工具部署的,感觉不太好管理,今天把它改成docker-compose的方式,这样管理起来就方便啦。

准备

  1. Ubuntu 18.04.3 LTS
  2. nacos 2.0.2
  3. docker-compose version 1.29.2

开始操作

以下为操作步骤,读者可直接移步https://github.com/nacos-group/nacos-docker查阅官方详细介绍。

  1. 编写docker-compose.yaml,要记得将项目中对应挂载的目录粘贴到指定位置。
version: "2"
services:
  nacos:
    image: nacos/nacos-server:${NACOS_VERSION}
    container_name: nacos-standalone
    environment:
    - PREFER_HOST_MODE=${PREFER_HOST_MODE}
    - MODE=${MODE}
    - SPRING_DATASOURCE_PLATFORM=${SPRING_DATASOURCE_PLATFORM}
    - MYSQL_SERVICE_HOST=${MYSQL_SERVICE_HOST}
    - MYSQL_SERVICE_DB_NAME=${MYSQL_SERVICE_DB_NAME}
    - MYSQL_SERVICE_USER=${MYSQL_SERVICE_USER}
    - MYSQL_SERVICE_PASSWORD=${MYSQL_SERVICE_PASSWORD}
    - MYSQL_SERVICE_DB_PARAM=${MYSQL_SERVICE_DB_PARAM}
    volumes:
    - ./standalone-logs/:/home/nacos/logs
    - ./init.d/custom.properties:/home/nacos/init.d/custom.properties
    ports:
    - "8848:8848"
    - "9848:9848"
    restart: on-failure
  1. 配置参数.env
NACOS_VERSION=2.0.2
MYSQL_SERVICE_HOST=127.0.0.1
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_DB_NAME=nacos_db
MYSQL_SERVICE_USER=nacos
MYSQL_SERVICE_PASSWORD=nacos123
# 使用mysql8.0需要配置allowPublicKeyRetrieval=true
MYSQL_SERVICE_DB_PARAM=allowPublicKeyRetrieval=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8
  1. 启动
docker-compose up -d

问题排查过程

排查过程我以自己遇到的来进行举例。

  1. 查看容器日志
docker-compose logs -f --tail 111 nacos

在这里插入图片描述

  1. 从容器日志里面可以看到是数据库配置的问题,但是没有详细日志,我们还是无法定位到问题,但是我们可以注意到项目启动的时候会有如下提示:
    在这里插入图片描述
    让我们可以去如下位置查看项目日志,由docker-compose配置找到对应的挂载位置进行查看,里面有很多日志文件都不认识,但是有一个肯定是首要排查的对象nacos.log
less nacos.log

在这里插入图片描述
嘿嘿,被抓到了,可以看到Public Key Retrieval is not allowed这个就是罪魁祸首,我们先去度娘找一下答案:
在这里插入图片描述
看来大家也都遇到过这个问题,让我们配置上试试看:
在这里插入图片描述
启动成功。可喜可贺!

以上提供一种思路,因为nacos有些日志不会在docker logs中打印,我们需要去查看详细日志。

<think>我们正在讨论的是 RuoYi-Cloud 微服务项目使用 Docker 部署的流程和操作步骤。根据引用[2]的内容,我们可以整理出以下步骤: 1. **环境准备**: - 确保服务器已安装 DockerDocker Compose- 如果以前安装过旧版本,需要先卸载旧版本(如引用[1]所述): ```bash yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine ``` - 然后安装 DockerDocker Compose(具体安装步骤不在引用中,但通常可以按照官方文档进行)。 2. **修改配置文件**: - 每个微服务模块(如 `ruoyi-auth`, `ruoyi-gateway`, `ruoyi-modules` 下的各个模块)的 `bootstrap.yml` 文件中,需要配置 Nacos 服务地址(用于服务发现和注册)、Redis 配置(用于缓存)以及数据库连接信息。 - 特别注意:引用[2]中提到,在第一次构建镜像时,需要在启动脚本中加入 `-Dfile.encoding=utf-8` 以避免中文乱码问题。 3. **打包项目**: - 使用 Maven 将每个微服务模块打包成可执行的 JAR 文件。 4. **准备 Docker 构建文件**: - 为每个微服务模块创建 Dockerfile 文件。 - Dockerfile 示例: ```dockerfile # 基础镜像 FROM openjdk:8-jdk-alpine # 维护者信息 MAINTAINER ruoyi # 设置时区 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 将jar包添加到容器中 COPY ./jar/ruoyi-module-system.jar /app.jar # 启动命令 ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "-Dfile.encoding=utf-8", "/app.jar"] ``` - 将打包好的 JAR 文件放到 Dockerfile 所在的目录(或子目录)中。 5. **构建镜像**: - 在每个微服务模块的目录下,执行 Docker 构建命令: ```bash docker build -t ruoyi-module-system:latest . ``` 6. **运行容器**: - 使用 `docker run` 命令运行每个镜像,注意暴露端口: ```bash docker run -di -p 9201:9201 --name ruoyi-system ruoyi-module-system:latest ``` - 其中 `9201:9201` 表示将容器的 9201 端口映射到主机的 9201 端口(根据实际配置文件中的端口修改)。 7. **使用 Docker Compose(推荐)**: - 为了方便管理多个容器,可以使用 Docker Compose- 创建 `docker-compose.yml` 文件,示例内容如下: ```yaml version: '3' services: nacos: image: nacos/nacos-server:latest container_name: nacos ports: - "8848:8848" environment: - MODE=standalone redis: image: redis:latest container_name: redis ports: - "6379:6379" mysql: image: mysql:5.7 container_name: mysql ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD=your_password volumes: - ./mysql/data:/var/lib/mysql - ./mysql/conf:/etc/mysql/conf.d ruoyi-gateway: build: context: ./ruoyi-gateway container_name: ruoyi-gateway ports: - "8080:8080" depends_on: - nacos - redis # 其他服务类似... ``` - 然后运行 `docker-compose up -d` 启动所有服务。 8. **验证部署**: - 查看容器日志:`docker logs -f <容器名>` - 访问 Nacos 控制台(http://服务器IP:8848/nacos),查看所有微服务是否已注册。 注意:在部署过程中,确保先启动基础设施服务(如 Nacos、Redis、MySQL),再启动微服务。 根据引用[2]的经验分享,如果需要其他模块(如代码生成模块、文件上传模块、定时任务模块),同样按照上述步骤修改配置文件、打包、构建镜像并运行。 下面我们给出一个清晰的步骤列表: </think>### RuoYi-Cloud 使用 Docker 部署的完整流程与操作步骤 #### 一、环境准备(必需) 1. **卸载旧版 Docker**(若存在) ```bash yum remove docker docker-client docker-client-latest docker-common \ docker-latest docker-latest-logrotate docker-logrotate \ docker-selinux docker-engine-selinux docker-engine ``` [^1] 2. **安装 Docker 依赖** ```bash yum install -y yum-utils device-mapper-persistent-data lvm2 ``` 3. **添加 Docker 官方源并安装** ```bash yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y docker-ce docker-ce-cli containerd.io ``` 4. **启动 Docker 服务** ```bash systemctl start docker && systemctl enable docker ``` --- #### 二、部署微服务模块 ##### 步骤 1:修改配置文件 1. 修改各模块的 `application.yml`: ```yaml spring: datasource: url: jdbc:mysql://mysql:3306/ry-cloud?useSSL=false # MySQL容器名称 redis: host: redis # Redis容器名称 nacos: discovery: server-addr: nacos:8848 # Nacos容器名称 ``` ##### 步骤 2:构建 Docker 镜像 1. **编写 Dockerfile**(以 `ruoyi-gateway` 为例): ```dockerfile FROM openjdk:11-jre-slim VOLUME /tmp COPY ruoyi-gateway.jar app.jar ENTRYPOINT ["java","-Dfile.encoding=utf-8","-jar","/app.jar"] # 关键中文编码参数 [^2] ``` 2. **构建镜像**: ```bash docker build -t ruoyi-gateway:1.0 . ``` ##### 步骤 3:部署基础设施 ```bash # MySQL 容器 docker run -d --name mysql -p 3306:3306 \ -e MYSQL_ROOT_PASSWORD=root \ -e MYSQL_DATABASE=ry-cloud \ mysql:5.7 # Redis 容器 docker run -d --name redis -p 6379:6379 redis # Nacos 容器 docker run -d --name nacos -p 8848:8848 \ -e MODE=standalone \ nacos/nacos-server ``` --- #### 三、使用 Docker Compose 统一管理 1. **创建 `docker-compose.yml`**: ```yaml version: '3' services: nacos: image: nacos/nacos-server ports: ["8848:8848"] environment: - MODE=standalone mysql: image: mysql:5.7 ports: ["3306:3306"] environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=ry-cloud redis: image: redis ports: ["6379:6379"] ruoyi-gateway: build: ./ruoyi-gateway # 指向Dockerfile目录 ports: ["8080:8080"] depends_on: - nacos - mysql - redis # 其他模块类似添加... ``` 2. **启动所有服务**: ```bash docker-compose up -d --build ``` --- #### 四、验证部署 1. **检查容器状态**: ```bash docker ps -a # 查看所有容器状态 ``` 2. **查看 Nacos 服务注册**: 访问 `http://服务器IP:8848/nacos`,确认所有微服务已注册 3. **日志排查问题**: ```bash docker logs -f ruoyi-gateway # 实时查看网关日志 ``` --- #### 关键注意事项 1. **中文编码问题** 必须在启动命令添加 `-Dfile.encoding=utf-8` 避免配置文件解析错误 [^2] 2. **依赖启动顺序** 微服务需通过 `depends_on` 确保在 MySQL/Redis/Nacos 后启动 3. **配置文件热更新** 修改配置后需重新构建镜像: ```bash docker-compose up -d --build ruoyi-gateway # 单独重建网关 ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生如夏花般绚丽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值