Docker 在 EdgeX Foundry 中的相关使用技巧
Docker 在 EdgeX Foundry 中的相关使用技巧
EdgeX Foundry 是一个开源的边缘计算框架,广泛用于物联网设备的开发与管理。它高度依赖 Docker 来实现服务的容器化部署。本文将分享一些在 EdgeX Foundry 中使用 Docker 的实用技巧,包括 Device Services 的注册、数据库服务操作、docker-compose.yml 的用法以及网络管理等方面的经验总结。希望能为开发者提供参考。
1.Device Services 注册问题
在开发或调试 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 的 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
注意:
- 在执行清理命令前,建议检查是否有重要数据未备份。
- 如果遇到权限问题,可使用 sudo 提升权限。
2.数据库服务的操作工具
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
...
3.docker-compose.yml 用法
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
- 可以添加自定义设备服务在现有的 docker-compose.yml 中,如添加 s7 设备服务,也可调整现有的端口映射或服务依赖关系。在调整 docker-compose.yml 时,也可能需要更改文件权限:
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-compose.yml 的目录)。
- 服务未启动:运行 docker compose ps 检查状态,可能需要查看日志定位问题。
4.Docker Network 容器互联
Docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。EdgeX Foundry 的服务之间通过 Docker 网络通信,默认网络名为 edgex-network。以下是网络相关的操作技巧:
- 列出所有 Docker 网络并过滤出 EdgeX 相关网络:
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 提供了强大的支持,但在实际使用中仍需注意资源管理和服务依赖关系。