--- title: "搭建持久化的 INFINI Console 与 Easysearch 容器环境 " date: 2025-06-14 lastmod: 2025-06-14 description: "手动运行 Docker 容器:搭建持久化的 INFINI Console 与 Easysearch 环境 (MacOS + OrbStack)" tags: ["Docker", "Easyserach", "Console"] summary: "背景介绍 # 许多用户在使用 Docker 部署 INFINI Console(本文使用 1.29.6 版本)时,可能会遇到一个常见问题:重启容器后,之前在 INFINI Console 中所连接的系统集群配置会丢失。这个问题通常源于未能正确配置 Docker 的数据持久化。原本通过 Docker 运行 INFINI Console 只是一个简单的测试示例,并未考虑多次重启使用,现官方文档也进行了更新,参考: 容器部署 接下来我们本地测试一下。 理解核心问题:Docker 容器与数据持久化 # 默认情况下,Docker 容器的文件系统是临时的。当容器被停止并删除后,容器内部所做的任何未被持久化的更改都会丢失。INFINI Console 的配置存储在其容器内部的特定目录中。为了在容器重启或重建后保留这些信息,我们必须将这些关键目录映射到宿主机(你的电脑)上的持久化存储位置。 准备工作 # 操作系统: macOS (本文示例) Docker 环境: OrbStack ( https://orbstack.dev/) 或 Docker Desktop for Mac。 请确保 Docker 服务已启动并正常运行。你可以通过在终端执行 docker --version 来验证。 docker --version Docker version 25.0.5, build 5dc9bcc 步骤一:创建本地持久化目录和自定义 Docker 网络 # 首先,在宿主机上为 Console 和 Easysearch 创建用于存储配置、数据和日志的目录。同时,创建一个自定义 Docker 网络,以便容器之间可以通过名称进行通信。" --- ## 背景介绍 许多用户在使用 Docker 部署 INFINI Console(本文使用 1.29.6 版本)时,可能会遇到一个常见问题:重启容器后,之前在 INFINI Console 中所连接的系统集群配置会丢失。这个问题通常源于未能正确配置 Docker 的数据持久化。原本通过 Docker 运行 INFINI Console 只是一个简单的测试示例,并未考虑多次重启使用,现官方文档也进行了更新,参考: [容器部署](https://docs.infinilabs.com/console/main/zh/docs/getting-started/docker/) > 接下来我们本地测试一下。 ## 理解核心问题:Docker 容器与数据持久化 默认情况下,Docker 容器的文件系统是临时的。当容器被停止并删除后,容器内部所做的任何未被持久化的更改都会丢失。INFINI Console 的配置存储在其容器内部的特定目录中。为了在容器重启或重建后保留这些信息,我们必须将这些关键目录映射到宿主机(你的电脑)上的持久化存储位置。 ## 准备工作 * **操作系统**: macOS (本文示例) * **Docker 环境**: OrbStack ([https://orbstack.dev/](https://orbstack.dev/)) 或 Docker Desktop for Mac。 请确保 Docker 服务已启动并正常运行。你可以通过在终端执行 `docker --version` 来验证。 ```bash docker --version Docker version 25.0.5, build 5dc9bcc ``` ## 步骤一:创建本地持久化目录和自定义 Docker 网络 首先,在宿主机上为 Console 和 Easysearch 创建用于存储配置、数据和日志的目录。同时,创建一个自定义 Docker 网络,以便容器之间可以通过名称进行通信。 ```bash # 1. 创建项目根目录和各个服务的持久化子目录 mkdir -p ~/infini_manual_setup/console/config ~/infini_manual_setup/console/data ~/infini_manual_setup/console/logs mkdir -p ~/infini_manual_setup/easysearch/config ~/infini_manual_setup/easysearch/data ~/infini_manual_setup/easysearch/logs cd ~/infini_manual_setup # 2. 创建一个自定义的 Docker 桥接网络 docker network create infini_app_net ``` * `infini_app_net` 是我们为这两个容器创建的自定义网络名称。 ## 步骤二:提取初始配置文件 为了方便首次启动和后续自定义,我们需要从官方 Docker 镜像中提取默认的配置文件到我们本地创建的持久化目录中。 **1. INFINI Console (1.29.6) 初始配置** 根据 INFINI Console [官方 Docker 文档](https://docs.infinilabs.com/console/main/zh/docs/getting-started/docker),其容器内配置文件位于 `/config`。 ```bash docker pull infinilabs/console:1.29.6 docker run --rm \ -v $PWD/console/config:/temp_host_config \ infinilabs/console:1.29.6 \ sh -c "cp -a /config/. /temp_host_config/ && chmod -R ugo+rw /temp_host_config/" ``` **2. INFINI Easysearch (1.13.0) 初始配置** INFINI Easysearch 镜像内部的配置文件位于 `/app/easysearch/config`,并且需要初始管理员密码 `INFINILabs01`。 **重要提示:请务必为 Easysearch 设置安全的密码。** ```bash docker pull infinilabs/easysearch:1.13.0 docker run --rm \ -e EASYSEARCH_INITIAL_ADMIN_PASSWORD="INFINILabs01" \ -v $PWD/easysearch/config:/temp_host_config \ infinilabs/easysearch:1.13.0 \ sh -c "cp -a /app/easysearch/config/. /temp_host_config/ && chmod -R ugo+rw /temp_host_config/" ``` 现在,你的本地 `console/config` 和 `easysearch/config` 目录应该包含了初始配置文件。 > 检查目录如下 > ```bash tree -L 3 . . ├── console │   ├── config │   │   ├── install_agent.tpl │   │   ├── permission.json │   │   ├── setup │   │   └── system_config.tpl │   ├── data │   └── logs └── easysearch ├── config │   ├── admin.crt │   ├── admin.key │   ├── analysis-ik │   ├── ca.crt │   ├── ca.key │   ├── easysearch.yml │   ├── easysearch.yml.example │   ├── instance.crt │   ├── instance.key │   ├── jvm.options │   ├── jvm.options.d │   ├── log4j2.properties │   └── security ├── data └── logs ``` ## 步骤三:手动运行 INFINI Easysearch 容器 使用 `docker run` 命令启动 Easysearch,并配置端口映射、环境变量和最重要的——卷挂载。 ```bash docker run -d \ --name easysearch01 \ --network infini_app_net \ -p 9200:9200 \ -p 9300:9300 \ -e cluster.name="infini_local_cluster" \ -e node.name="easysearch-node01" \ -e cluster.initial_master_nodes="easysearch-node01" \ -e "ES_JAVA_OPTS=-Xms1g -Xmx1g" \ -e EASYSEARCH_INITIAL_ADMIN_PASSWORD="INFINILabs01" \ -v $PWD/easysearch/config:/app/easysearch/config \ -v $PWD/easysearch/data:/app/easysearch/data \ -v $PWD/easysearch/logs:/app/easysearch/logs \ --ulimit memlock=-1:-1 \ --ulimit nofile=65536:65536 \ infinilabs/easysearch:1.13.0 ``` **关键参数解释:** * `--name easysearch01`: 为容器指定一个名称。 * `--network infini_app_net`: 连接到自定义网络。 * `-p HOST_PORT:CONTAINER_PORT`: 端口映射。 * `-e VARIABLE=VALUE`: 设置环境变量。 * `-v $PWD/host/path:/container/path`: **实现持久化的核心**。将宿主机当前工作目录 (`$PWD`) 下的子目录映射到容器内的指定路径。 ## 步骤四:手动运行 INFINI Console 容器 现在启动 Console 容器,同样配置网络、端口、环境变量和卷挂载。 ```bash docker run -d \ --name console01 \ --network infini_app_net \ -p 9000:9000 \ -v $PWD/console/config:/config \ -v $PWD/console/data:/data \ -v $PWD/console/logs:/log \ infinilabs/console:1.29.6 ``` > 查看日志 ```bash docker logs -f easysearch01 docker logs -f console01 ``` ## 步骤五:验证服务和持久化 1. **检查容器状态**: `docker ps` (应能看到 `easysearch01` 和 `console01`)。 2. **访问 Console**: 浏览器打开 `http://localhost:9000`。 3. **在 Console 中进行初始化配置** 4. **测试持久化 (重启 Console 容器)**: ```bash docker stop console01 docker rm console01 # 重新运行步骤四中启动 Console 的 docker run 命令 (确保所有参数一致) ``` 操作截图 {{% load-img "/img/blog/2025/console-easysearch-with-docker/image-001.png" "" %}} {{% load-img "/img/blog/2025/console-easysearch-with-docker/image-002.png" "" %}} {{% load-img "/img/blog/2025/console-easysearch-with-docker/image-003.png" "" %}} **再次访问 Console**: 打开 `http://localhost:9000`。如果一切正常,证明持久化成功。 ## 步骤六:停止和清理(可选) * 停止容器: `docker stop console01 easysearch01` * 移除容器: `docker rm console01 easysearch01` * 移除网络: `docker network rm infini_app_net` * 移除本地持久化数据 (如果不再需要): ```bash rm -rf ~/infini_manual_setup/console rm -rf ~/infini_manual_setup/easysearch ``` ## 总结 通过 `docker run` 命令并仔细配置卷挂载,我们成功地为 INFINI Console 和 Easysearch 构建了一个具有持久化能力的本地容器环境,有效解决了重启后配置丢失的问题。虽然手动操作参数较多,但它能让你更清晰地理解 Docker 的核心机制。 在后续的文章中,我们将探讨如何使用 Docker Compose 来简化这一过程。