EdgeX Foundry 是一个开源的边缘计算框架,广泛用于物联网设备的开发与管理。它高度依赖 Docker 来实现服务的容器化部署。本文将分享一些 EdgeX Foundry 在 Docker 容器微服务下的相关使用技巧,包括 Device Services 的注册、数据库服务操作、docker-compose.yml 的用法以及网络管理等方面的经验总结。希望能为开发者提供参考。
在开发或调试 EdgeX Foundry 的 Device Services 时,可能会遇到设备服务配置残留或配置未正确加载的问题,并且在官方 UI 界面(如下图所示)中没有删除具体一个 Device Service
的接口。
这会导致我们在加载 修改后的设备服务(关键是 /res/configration.yml
文件)时很麻烦,Device Service 的配置信息是存放在官方数据库服务容器 postgres:16.3
中的,最简单干脆的清理办法是清除所有Docker 卷:
# 删除所有已停止和运行中的容器
docker rm -f $(docker ps -a -q)
# 删除所有未使用的 Docker 卷
docker volume rm -f $(docker volume ls -q)
假设你已经下载了 EdgeX 的 edgex-compose 仓库,可以通过以下步骤重新启动服务,此时获得了全新的一套 EdgeX 微服务:
# 进入 compose-builder 目录
cd /home/ubuntu/edgex/edgex-compose/compose-builder/
# 后台启动所有服务
docker compose up -d
root@ubuntu:/home/ubuntu/edgex/edgex-compose/compose-builder# docker compose up -d
[+] Running 17/17
✔ Volume "edgex_db-data" Created 0.0s
✔ Volume "edgex_kuiper-data" Created 0.0s
...
✔ Container edgex-support-scheduler Started 2.4s
✔ Container edgex-app-rules-engine Started 2.6s
✔ Container edgex-core-command Started 2.6s
注意:
EdgeX 的 Compose 文件仓库会为我们生成数据库服务容器如下:
ID IMAGE COMMAND PORTS NAMES ...
8xxx7a postgres:16.3-alpine3.20 "docker-entrypoint.s…" 127.0.0.1:5432->5432/tcp edgex-postgres ...
为了方便查看数据库内部一些关键数据表的状态和信息,建议把 Postgres 端口映射到本地,用 SQL 工具(推荐 DBeaver)连接上,进行增删改查 :
注意:
docker-compose.yml
文件中能看到数据库用户名和密码: database:
container_name: edgex-postgres
environment:
POSTGRES_DB: edgex_db
POSTGRES_PASSWORD: postgres
...
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
EdgeX Foundry 部署服务的核心配置文件正是 docker-compose.yml , 同时也是自定义设备服务的重要部署工具。以下是一些常用操作和注意事项 : (在 docker-compose.yml 同级文件夹下运行)
docker compose down
docker compose ps
docker compose up -d
docker compose restart edgex-device-openvino
docker logs -f edgex-device-openvino
chmod +w docker-compose.yml
vim docker-compose.yml
...
bind:
create_host_path: true
device-s7:
command:
- -cp=keeper.http://edgex-core-keeper:59890
- --registry
...
read_only: true
bind:
create_host_path: true
mqtt-broker:
...
常见问题:
Docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。EdgeX Foundry 的服务之间通过 Docker 网络通信,默认网络名为 edgex-network。以下是网络相关的操作技巧:
docker network ls | grep edgex-network
# docker network ls | grep edgex-network
399e879a892b edgex_edgex-network bridge local
docker inspect edgex-device-openvino | grep Network
docker network rm edgex-network
docker compose up -d # 自动重新创建网络
注意:删除网络前,确保没有正在运行的服务依赖它。
通过本文,我们介绍了在 EdgeX Foundry 中使用 Docker 的一些实用技巧,包括清理容器、操作数据库、管理 docker-compose.yml 文件以及网络排查。这些方法可以帮助开发者更高效地部署和调试 EdgeX 服务。Docker 的灵活性为 EdgeX 提供了强大的支持,但在实际使用中仍需注意资源管理和服务依赖关系。