floci v2.3.0 Docker Compose 部署指南
用官方安装脚本与 Docker Compose 两条路径部署 floci v2.3.0 本地 AWS 模拟器,完成 doctor 七项自检、persistent 模式跨重启验证与 Web 控制台访问,含六条排障实录。
floci v2.3.0 Docker Compose 部署指南
目标:在一台 Ubuntu 服务器上部署 floci v2.3.0 本地 AWS 模拟器,覆盖「官方安装脚本 + floci start 一键起」与「Docker Compose 持久化部署」两条路径,完成 AWS CLI 连接验证、持久化跨重启验证与 Web 控制台访问。本文全部命令与回显均在 Ubuntu 22.04 LTS + Docker Engine 29.1.3(Compose v2.40.3)环境、floci CLI 0.4.0 / floci v2.3.0 实测通过(2026-10-25)。
一、环境信息
- 操作系统:Ubuntu 22.04 LTS(x86_64)
- Docker Engine:29.1.3,Docker Compose 插件 v2.40.3
- floci 版本:v2.3.0(2026-10-25 经 shields.io latest release 徽章核实的最新稳定版),官方镜像
floci/floci - floci CLI 版本:0.4.0
- AWS CLI:aws-cli/2.x(用于连接验证与对拍)
- 端口规划:模拟器 API 端口
4566(AWS 协议统一入口)、Web 控制台4500(首次访问时按需拉起);若宿主 4566 已被占用,可将映射改为8128:4566等空闲端口,后续所有localhost:4566相应替换 - 编排目录:
/opt/floci/(含compose.yaml与数据目录data/) - 内存要求:控制面为 Quarkus native 服务(实测启动毫秒级),叠加数据面真实引擎后整体吃内存,建议宿主机内存 ≥ 8GB
二、部署路径怎么选
| 路径 | 适用场景 | 状态管理 |
|---|---|---|
路径 A:安装脚本 + floci start | 快速体验、开发机自用 | floci CLI 托管(默认内存态,floci stop/start 控制) |
| 路径 B:Docker Compose | 服务器长期运行、CI 节点、需要持久化 | 自持一份 compose.yaml,docker compose 管理 |
两条路径共用同一官方镜像,功能完全一致;区别只在「谁管生命周期」。生产/CI 建议路径 B(配置即代码 + 持久化),本机试用建议路径 A。
三、路径 A:安装脚本一键起
3.1 安装 floci CLI
curl -fsSL https://floci.io/install.sh | sh
实测输出(逐行照抄):
+ Found latest CLI version: v0.4.0
+ Downloading floci-cli-linux-amd64 v0.4.0...
+ Installing to /usr/local/bin
+ floci installed successfully.
Run 'floci --help' to get started.
排障:安装脚本从 GitHub Releases 下载二进制。若服务器直连 GitHub 失败(超时/连接重置),给当前 Shell 注入代理后重试,例如
export https_proxy=http://<代理IP>:<端口>再执行同一条命令。实测受限网络下直连报连接错误、走代理后一次成功;脚本探测最新版本失败时还会自动重试 4 次,仍失败可按官方提示用FLOCI_CLI_VERSION=<tag>钉版本重试。
安装后验证:
floci version
实测输出:
Floci CLI version 0.4.0
3.2 环境自检与拉起
floci install 子命令在 0.4.0 中不存在(floci install 实测报 unknown command "install" for "floci"),环境检查由 floci start 内置完成;若需单独体检,用 floci doctor(详见 《floci v2.3.0 常用 CLI 命令详解》第七章)。直接拉起:
floci start
实测输出(逐行照抄):
Starting Floci AWS...
=== AWS Local Emulator Ready ===
Floci AWS is ready (http://localhost:4566)
Regional endpoints:
http://us-east-1.localhost:4566
http://eu-west-1.localhost:4566
http://ap-southeast-1.localhost:4566
Web Console: http://localhost:4566/_floci/ui
Click or GET the URL to start the sidecar container.
Configure FLOCI_SERVICES_UI_ENABLED=false to disable.
若要启用 Lambda 和 EC2 的真实执行能力,按官方提示安装运行时组件(floci install 提示原文已随 0.4.0 移除,实际做法见 D1 篇 16.10/16.11——首次调用时自动拉取对应运行时镜像)。
3.3 状态与连接验证
floci status
实测输出:
Floci AWS Status
Container: floci running (healthy)
Image: floci/floci:latest
Endpoint: http://localhost:4566
Reachable: yes
Stop with 'floci stop'.
配置 AWS CLI(floci 接受任意 Access Key,floci env 输出的占位凭据即可):
eval $(floci env)
aws sts get-caller-identity
实测输出:
{
"UserId": "000000000000",
"Account": "000000000000",
"Arn": "arn:aws:iam::000000000000:root"
}
四、路径 B:Docker Compose 持久化部署(推荐)
4.1 编排文件
创建 /opt/floci/compose.yaml(实测通过的完整版本):
name: floci-v2.3.0-stack
services:
floci:
image: floci/floci:latest
container_name: floci
restart: unless-stopped
ports:
- "4566:4566"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/app/data
environment:
FLOCI_STORAGE_MODE: persistent
FLOCI_STORAGE_PERSISTENT_PATH: /app/data
FLOCI_DEFAULT_REGION: us-east-1
三个关键点:
FLOCI_STORAGE_MODE: persistent+FLOCI_STORAGE_PERSISTENT_PATH: /app/data必须成对出现——只挂./data而不开 persistent,模拟器仍把状态放内存,数据目录永远为空(见第 7.2 节排障);官方存储文档另有hybrid(内存 + 定期落盘快照)与wal(预写日志)两种模式可选;/var/run/docker.sock是 Lambda、EC2、EKS、MSK、ECR、CodeBuild 等「真实执行」能力的前提,缺了它基础服务可用但真实负载不执行(floci config validate会直接报错,见 4.3);name: floci-v2.3.0-stack固定栈名,避免目录名变化导致资源漂移。
4.2 启动与验证
cd /opt/floci
docker compose up -d
docker compose ps
实测输出:
NAME IMAGE STATUS PORTS
floci floci/floci:latest Up 10 minutes (healthy) 0.0.0.0:4566->4566/tcp, [::]:4566->4566/tcp
(实测栈还开放了 ElastiCache 端口池 6379-6399 的映射,属后续按需加配,见第 4.4 节。)
就绪探测:curl -s -o /dev/null -w "%{http_code}\n" http://localhost:4566 返回 200 即就绪;或等 docker compose ps 出现 (healthy)。
4.3 部署前自检:floci config validate
把 compose 文件交给 floci CLI 做部署前体检(能查出缺 sock 挂载、声明了持久化目录却没开 persistent 等错误):
floci config validate --file /opt/floci/compose-bad.yaml
对一个故意缺 sock 挂载、挂了 /app/data 却没开 persistent 的坏文件,实测输出(逐行照抄):
Validating /opt/floci/compose-bad.yaml (service: floci)
x Missing /var/run/docker.sock volume mount — required for Lambda, EC2, EKS, MSK, ECR, CodeBuild
! A volume is mounted at /app/data but FLOCI_STORAGE_MODE is not 'persistent' — the emulator keeps its state in memory by default, so the volume stays empty
1 error(s) found.
exit=1
x 为错误(退出码 1),! 为警告;上线前务必跑到 0 error。
4.4 按需开放数据面端口池
要用 ElastiCache(真实 Valkey 引擎)、RDS MySQL(3306-3399)、RDS PostgreSQL(5432-5599,官方文档标注端口池 5432-5999/7001-7099 两段)等需要原生客户端直连的服务,把端口池映射加进 compose 再 docker compose up -d:
ports:
- "4566:4566"
- "6379-6399:6379-6399"
实测建 ElastiCache 集群后宿主机 redis-cli -h 127.0.0.1 -p 6379 PING 直接返回 PONG(完整对拍见 D1 篇 16.12)。
五、持久化跨重启实测
在 persistent 模式下创建一个桶和一张表,重启整个栈后验证资源仍在:
export AWS_ENDPOINT_URL=http://localhost:4566 AWS_DEFAULT_REGION=us-east-1 AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test
aws s3 mb s3://persist-bucket
aws s3 cp /etc/hostname s3://persist-bucket/host.txt --quiet
aws dynamodb create-table --table-name persist-tbl \
--attribute-definitions AttributeName=id,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH --billing-mode PAY_PER_REQUEST
cd /opt/floci && docker compose down && docker compose up -d && sleep 8
aws s3 ls
aws dynamodb list-tables
aws s3 cp s3://persist-bucket/host.txt -
实测输出(重启后):
2026-10-25 00:47:04 persist-bucket
{
"TableNames": [
"persist-tbl"
]
}
<宿主机名>
桶、对象、表全部跨 compose down/up 存活,/app/data 目录可见持久化文件。作为对照组:默认内存态(ephemeral)下同样操作,compose down 再起后 aws s3 ls 输出为空——资源全部丢失。结论:长期使用必须开 persistent 模式。
另注:persistent 模式会把 FLOCI_DEFAULT_REGION 一并持久化——实测把区域临时改为 cn-north-1 后重启,aws s3 ls 在 us-east-1 会话下为空,需把区域变量改回并重建栈才恢复(详见配置篇第四章)。
六、Web 控制台访问
floci 内置免费 Web 控制台(floci/floci-ui 镜像,实测版本 0.7.0),首次访问 http://<服务器IP>:4566/_floci/ui 时自动按需拉起并发布到 4500 端口,浏览器打开 http://<服务器IP>:4500 即可使用。
实测健康端点(控制台就绪后):
curl -s http://localhost:4500/api/health
实测输出:
{"status":"ok","version":"0.7.0","panels":["app-config","compute","kms-crypto","lambda-trigger","logs-explorer","logs-explorer-query","networking","sagemaker-dashboard","sqs-messaging","workflow-executions","expandable"]}
控制台面板覆盖应用配置、计算资源、KMS、Lambda 触发器、日志浏览/查询、网络、SageMaker 仪表盘、SQS 消息收发、工作流执行等。若不希望开放控制台,设置 FLOCI_SERVICES_UI_ENABLED=false(实测关闭后 /_floci/ui 返回 404,不再拉起)。
七、排障实录
7.1 floci start 报 Cannot connect to the Docker daemon
现象:floci start 直接失败,实测回显:
Error: Failed to inspect container: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Check that Docker is running ('docker info') and re-run the command.
原因:Docker 引擎没起来。处理:systemctl start docker(并 systemctl enable docker 防止重启后复发)后重跑 floci start。
7.2 挂了 /app/data 但目录始终为空
现象:compose 里挂了 ./data:/app/data,ls data/ 一直为空。
原因:没设 FLOCI_STORAGE_MODE: persistent,模拟器状态留在内存。处理:补上 FLOCI_STORAGE_MODE: persistent 与 FLOCI_STORAGE_PERSISTENT_PATH: /app/data 两个变量并重建栈;用 floci config validate 可在部署前查出(见 4.3)。
7.3 floci reset 拒绝执行
现象:floci reset 报错退出(退出码 1):
Error: reset deletes every resource in Floci AWS and needs confirmation.
Pass --yes to reset without asking.
处理:确认要清空全部资源后执行 floci reset --yes(实测输出 + Floci AWS state reset (http://localhost:4566))。
7.4 内存不足导致进程被杀
现象:模拟器进程无故退出(退出码 137)。floci 控制面为 Quarkus native 服务,叠加数据面真实引擎(Lambda 运行时、ElastiCache、RDS 等)后整体内存占用可观;宿主内存不足时会被 OOM Killer 结束。处理:保障 ≥ 8GB 内存、预留磁盘;用 floci status 确认后 floci start 重新拉起。
7.5 拉取镜像缓慢或失败
现象:floci start/docker compose up 卡在拉取 floci/floci 镜像或报超时。原因:服务器到 Docker Hub 链路受限。处理:为 Docker 引擎配置镜像加速或代理(/etc/docker/daemon.json 的 registry-mirrors,或 systemd drop-in 注入 HTTPS_PROXY)后 systemctl restart docker 重试。
7.6 防火墙放行
服务器启用防火墙时放行 4566(与按需开放的 4500、数据面端口池):
ufw allow 4566/tcp && ufw reload
八、收尾与系列导航
- 停止/启动:路径 A 用
floci stop/floci start;路径 B 用docker compose down/up -d - 系列导航:《floci v2.3.0 介绍与选型指南》(定位、真实执行架构与 LocalStack/Moto 量化对比)、《floci v2.3.0 配置参数详解》(FLOCI_* 全参数表与实测)、《floci v2.3.0 常用 CLI 命令详解》(floci CLI 全子命令 + AWS CLI 对拍实测)