使用 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 并连接到现有中间件。
这种方式最适合初学者和开发环境,它能一键拉起所有依赖。
创建一个工作目录,例如 seata-docker
:
mkdir seata-docker && cd seata-docker
下载 Seata 的配置文件包(关键步骤!):
你需要从 Seata 的 GitHub Release 页面下载配置文件,并将其挂载到容器中。
```bash
unzip seata-server-1.8.0.zip
seata
文件夹,里面包含 conf
目录。cp -r seata/conf seata/conf-backup
```
Seata 需要知道如何连接 Nacos。我们需要修改 seata/conf/application.yml
文件。
编辑 application.yml
:
vim seata/conf/application.yml
修改关键配置:找到 registry
和 config
部分,将其类型改为 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-addr
从localhost
改为了nacos
,这是 Docker Compose 的网络特性,容器间可以通过服务名通信。
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
指向容器自身,外部无法访问。
在 docker-compose.yml
所在目录执行:
docker-compose up -d
http://你的服务器IP:8848/nacos
,默认账号/密码为 nacos/nacos
。
seata-server
服务,表示 Seata 已成功注册。http://你的服务器IP:8091
,默认账号/密码为 seata/seata
。docker logs -f seata-server
检查是否有错误日志。如果你已经有一个在运行的 Nacos(或其他注册/配置中心),可以单独启动 Seata 容器并连接它。
docker pull seataio/seata-server:1.8.0
通过环境变量覆盖默认配置,指向你现有的 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) | 手动(需已有中间件) |
配置灵活性 | 高(可挂载自定义配置文件) | 低(依赖环境变量) |
适用场景 | 开发、测试、演示 | 生产或已有环境 |
seata-all
或 seata-spring-boot-starter
客户端版本**一致**,这是避免很多奇怪问题的关键。file
模式,**数据不持久化,重启即丢失**。生产环境一定要配置 db
或 redis
模式,并修改相应配置(如数据库连接串)。7091
,用于 TC 与 TM/RM 的通信;控制台端口是 8091
。对于大多数学习和开发场景,**强烈推荐使用方案一(Docker Compose)**,它更能帮助你理解 Seata 的完整工作流程。