调整和iot的通讯机制

This commit is contained in:
anlicheng 2026-05-07 23:28:39 +08:00
parent 64243bfb39
commit bd0503144d
2 changed files with 10 additions and 8 deletions

View File

@ -190,7 +190,6 @@ docker_helper:update_container_config(ContainerNameOrId, iolist_to_binary(Config
```erlang ```erlang
#{ #{
container_name => ContainerName, container_name => ContainerName,
container_dir => ContainerDir,
create => Create create => Create
} }
``` ```
@ -200,10 +199,15 @@ docker_helper:update_container_config(ContainerNameOrId, iolist_to_binary(Config
| 字段 | 类型 | 说明 | | 字段 | 类型 | 说明 |
| --- | --- | --- | | --- | --- | --- |
| `container_name` | binary | 容器名称。用于容器创建 URL 的 `name` 参数,也会注入环境变量 `CONTAINER_NAME`。 | | `container_name` | binary | 容器名称。用于容器创建 URL 的 `name` 参数,也会注入环境变量 `CONTAINER_NAME`。 |
| `container_dir` | binary | 容器在 efka 主机上的应用目录。为空时使用 `efka.root_dir/ContainerName/`。 |
| `create` | map | Docker create options 的中间结构,由 `iot` 侧构造,`efka` 侧补丁后转为 Docker JSON。 | | `create` | map | Docker create options 的中间结构,由 `iot` 侧构造,`efka` 侧补丁后转为 Docker JSON。 |
`docker_deploy_manager` 会根据 `container_name``container_dir` 确保容器目录存在,并写入 `.container_dir` 指针文件。 `docker_deploy_manager` 会根据 `container_name` 按系统默认规则确保容器目录存在。目录固定为:
```text
efka.root_dir/container_name/
```
即使旧客户端在 `params` 中携带 `container_dir`,当前 deploy 流程也会忽略它,避免 HTTP 调用方控制 efka 主机上的写入目录。
## 5. create 中间结构 ## 5. create 中间结构
@ -660,7 +664,6 @@ efka 自动补丁后输出:
task_id => 1001, task_id => 1001,
params => #{ params => #{
container_name => <<"my_nginx">>, container_name => <<"my_nginx">>,
container_dir => <<"/data/apps/my_nginx">>,
create => #{ create => #{
config => #{ config => #{
image => <<"docker.io/library/nginx:latest">>, image => <<"docker.io/library/nginx:latest">>,
@ -709,7 +712,7 @@ efka 自动补丁后输出:
"Healthcheck": {}, "Healthcheck": {},
"HostConfig": { "HostConfig": {
"Binds": [ "Binds": [
"/data/apps/my_nginx/service.conf:/usr/local/etc/service.conf", "/efka/root/my_nginx/service.conf:/usr/local/etc/service.conf",
"/host/data:/data" "/host/data:/data"
], ],
"RestartPolicy": { "RestartPolicy": {
@ -724,7 +727,7 @@ efka 自动补丁后输出:
deploy action 的执行流程: deploy action 的执行流程:
1. 根据 `container_name``container_dir` 确保容器目录存在。 1. 根据 `container_name``efka.root_dir` 确保默认容器目录存在。
2. 启动独立部署进程。 2. 启动独立部署进程。
3. 部署进程上报任务事件流。 3. 部署进程上报任务事件流。
4. 规范化镜像名:如果镜像最后一段没有 tag则补 `:latest` 4. 规范化镜像名:如果镜像最后一段没有 tag则补 `:latest`

View File

@ -50,8 +50,7 @@ init([]) ->
handle_call({deploy, TaskId, Params}, _From, State = #state{root_dir = RootDir, task_map = TaskMap}) handle_call({deploy, TaskId, Params}, _From, State = #state{root_dir = RootDir, task_map = TaskMap})
when is_map(Params) -> when is_map(Params) ->
ContainerName = maps:get(container_name, Params), ContainerName = maps:get(container_name, Params),
ContainerDir0 = maps:get(container_dir, Params, <<>>), {ok, ContainerDir} = docker_helper:ensure_container_dir(RootDir, ContainerName),
{ok, ContainerDir} = docker_helper:ensure_container_dir(RootDir, ContainerName, ContainerDir0),
{ok, {TaskPid, _Ref}} = docker_deployer:start_monitor(TaskId, ContainerDir, Params), {ok, {TaskPid, _Ref}} = docker_deployer:start_monitor(TaskId, ContainerDir, Params),
logger:debug("[docker_deploy_manager] start deploy task_id: ~p, params: ~p", [TaskId, Params]), logger:debug("[docker_deploy_manager] start deploy task_id: ~p, params: ~p", [TaskId, Params]),
{reply, ok, State#state{task_map = maps:put(TaskPid, TaskId, TaskMap)}}; {reply, ok, State#state{task_map = maps:put(TaskPid, TaskId, TaskMap)}};