第三节 是用Docker安装Seata

亮子 2025-08-26 11:54:31 104 0 0 0

使用 Docker 安装 Seata 通常有两种主流方式:
1. 使用官方镜像(推荐,最简单):直接拉取 Seata-Server 镜像运行,并通过环境变量或挂载文件配置注册中心、配置中心。
2. 使用 Docker Compose(最常用,适合演示和开发):编写 docker-compose.yml 文件,一键部署 Seata-Server 及其依赖(如 Nacos)。

由于 Seata 需要依赖**注册中心**(如 Nacos, Eureka)和**配置中心**(如 Nacos, Apollo)才能正常工作,下面我将提供两种最常用的方案:**使用 Docker Compose 部署 Seata 与 Nacos** 和 单独使用 Docker 运行 Seata 并连接到现有中间件


方案一:使用 Docker Compose 一键部署 Seata + Nacos (推荐用于开发测试)

这种方式最适合初学者和开发环境,它能一键拉起所有依赖。

步骤 1:创建目录并下载配置文件

  1. 创建一个工作目录,例如 seata-docker

    mkdir seata-docker && cd seata-docker
    
  2. 下载 Seata 的配置文件包(关键步骤!):
    你需要从 Seata 的 GitHub Release 页面下载配置文件,并将其挂载到容器中。
    ```bash

    以 v1.8.0 版本为例,下载配置文件压缩包

    wget https://github.com/seata/seata/releases/download/v1.8.0/seata-server-1.8.0.zip

    解压

    unzip seata-server-1.8.0.zip

    解压后你会得到一个 seata 文件夹,里面包含 conf 目录。

    重命名或复制一份配置文件以备修改(可选但推荐)

    cp -r seata/conf seata/conf-backup
    ```

步骤 2:修改 Seata 配置文件

Seata 需要知道如何连接 Nacos。我们需要修改 seata/conf/application.yml 文件。

  1. 编辑 application.yml:

    vim seata/conf/application.yml
    

  2. 修改关键配置:找到 registryconfig 部分,将其类型改为 nacos,并填写 Nacos 服务器的地址(因为我们将使用 Compose 在同一网络内启动 Nacos,所以可以用服务名 nacos 作为主机名)。

    seata:
      registry:
        type: nacos
        nacos:
          application: seata-server
          server-addr: nacos:8848 # 使用 Docker Compose 的服务名
          namespace: ""
          group: SEATA_GROUP
          username: "nacos"
          password: "nacos"
      config:
        type: nacos
        nacos:
          server-addr: nacos:8848 # 使用 Docker Compose 的服务名
          namespace: ""
          group: SEATA_GROUP
          username: "nacos"
          password: "nacos"
          data-id: seataServer.properties
    

    注意server-addrlocalhost 改为了 nacos,这是 Docker Compose 的网络特性,容器间可以通过服务名通信。

步骤 3:编写 docker-compose.yml 文件

在工作目录 seata-docker 下创建 docker-compose.yml 文件。

version: "3.8"
services:
  nacos:
    image: nacos/nacos-server:v2.2.3 # 使用稳定版本
    container_name: nacos-server
    environment:
      - MODE=standalone # 单机模式
      - JVM_XMS=512m
      - JVM_XMX=512m
    ports:
      - "8848:8848" # Nacos 控制台端口
      - "9848:9848" # Nacos 2.0 新增的gRPC端口,必须暴露
    volumes:
      - nacos_data:/home/nacos/data
    networks:
      - seata-net

  seata-server:
    image: seataio/seata-server:1.8.0 # 使用与配置文件对应的版本
    container_name: seata-server
    ports:
      - "8091:8091" # Seata 控制台端口
      - "7091:7091" # Seata 服务端口
    environment:
      - SEATA_IP=你的宿主机IP # 重要!用于注册到Nacos的IP,如果是本地开发填192.168.x.x或宿主机IP,不能是127.0.0.1
      - STORE_MODE=file # 存储模式,file为本地文件(仅测试用),生产需用db或redis
      # 其他环境变量可根据需要添加
    volumes:
      - ./seata/conf:/seata-server/resources # 挂载上一步修改好的配置文件
      - ./seata/logs:/root/logs/seata # 挂载日志
    depends_on:
      - nacos
    networks:
      - seata-net

volumes:
  nacos_data:

networks:
  seata-net:
    driver: bridge

重要:请将 SEATA_IP 环境变量的值替换为你的**宿主机真实IP地址**(如 192.168.1.100),不能是 127.0.0.1。这是因为 Seata 需要将自己的服务地址(IP:Port)注册到 Nacos,其他微服务需要能通过这个地址访问到它。在 Docker 容器内,127.0.0.1 指向容器自身,外部无法访问。

步骤 4:启动服务

docker-compose.yml 所在目录执行:

docker-compose up -d

步骤 5:验证安装

  1. 访问 Nacos 控制台http://你的服务器IP:8848/nacos,默认账号/密码为 nacos/nacos
    • 在「服务管理」->「服务列表」中应能看到 seata-server 服务,表示 Seata 已成功注册。
  2. 访问 Seata 控制台http://你的服务器IP:8091,默认账号/密码为 seata/seata
  3. 查看日志docker logs -f seata-server 检查是否有错误日志。

方案二:单独使用 Docker 命令运行 Seata(连接现有中间件)

如果你已经有一个在运行的 Nacos(或其他注册/配置中心),可以单独启动 Seata 容器并连接它。

步骤 1:拉取镜像

docker pull seataio/seata-server:1.8.0

步骤 2:运行容器(以 Nacos 为例)

通过环境变量覆盖默认配置,指向你现有的 Nacos 服务器。

docker run -d --name seata-server \
  -p 8091:8091 \
  -p 7091:7091 \
  -e SEATA_IP=你的宿主机IP \
  -e SEATA_PORT=7091 \
  -e SEATA_CONFIG_NAME=file:/root/seata-config/registry \
  -e REGISTRY_TYPE=nacos \
  -e REGISTRY_NACOS_APPLICATION=seata-server \
  -e REGISTRY_NACOS_SERVER_ADDR=你的Nacos服务器IP:8848 \ # 例如 192.168.1.200:8848
  -e REGISTRY_NACOS_NAMESPACE= \
  -e REGISTRY_NACOS_GROUP=SEATA_GROUP \
  -e REGISTRY_NACOS_USERNAME=nacos \
  -e REGISTRY_NACOS_PASSWORD=nacos \
  seataio/seata-server:1.8.0

说明:这种方式通过大量环境变量来配置 Seata,省去了挂载配置文件的麻烦,但灵活性不如方案一。你需要确保所有参数(如 Nacos 地址、命名空间、Group)都正确。


总结与注意事项

特性 方案一 (Docker Compose) 方案二 (Docker Run)
难度 中等 简单
依赖管理 自动(包含Nacos) 手动(需已有中间件)
配置灵活性 (可挂载自定义配置文件) 低(依赖环境变量)
适用场景 开发、测试、演示 生产或已有环境
  1. 版本对齐:确保 Seata-Server 镜像版本、配置文件版本与你业务中使用的 seata-allseata-spring-boot-starter 客户端版本**一致**,这是避免很多奇怪问题的关键。
  2. 存储模式:上述示例使用的是 file 模式,**数据不持久化,重启即丢失**。生产环境一定要配置 dbredis 模式,并修改相应配置(如数据库连接串)。
  3. 网络与IP:在 Docker 环境中,**IP地址**是最常见的坑。务必保证 Seata 注册到注册中心的IP是其他微服务**能够访问到**的地址。
  4. 端口:Seata 默认服务端口是 7091,用于 TC 与 TM/RM 的通信;控制台端口是 8091

对于大多数学习和开发场景,**强烈推荐使用方案一(Docker Compose)**,它更能帮助你理解 Seata 的完整工作流程。