From df1741af8afb85d988518bcbf32025d2882f1bf5 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Tue, 23 Sep 2025 16:20:47 +0800 Subject: [PATCH] fix build options --- apps/efka/src/docker/docker_uds_commands.erl | 125 +++++++------------ 1 file changed, 46 insertions(+), 79 deletions(-) diff --git a/apps/efka/src/docker/docker_uds_commands.erl b/apps/efka/src/docker/docker_uds_commands.erl index a45f33a..283731f 100644 --- a/apps/efka/src/docker/docker_uds_commands.erl +++ b/apps/efka/src/docker/docker_uds_commands.erl @@ -217,36 +217,34 @@ gather_output(Port, Acc) -> %% 构建最终 JSON Map build_options(Config) when is_map(Config) -> - maps:merge( - #{ - <<"Image">> => maps:get(<<"image">>, Config, <<>>), - <<"Cmd">> => maps:get(<<"command">>, Config, []), - <<"Entrypoint">> => maps:get(<<"entrypoint">>, Config, []), - <<"Env">> => maps:get(<<"envs">>, Config, []), - <<"HostConfig">> => fold_merge([ - build_volumes(Config), - build_restart(Config), - build_privileged(Config), - build_cap_add_drop(Config), - build_devices(Config), - build_memory(Config), - build_cpu(Config), - build_ulimits(Config), - build_tmpfs(Config), - build_extra_hosts(Config) - ]) - }, - fold_merge([ - build_expose(Config), + #{ + <<"Image">> => maps:get(<<"image">>, Config, <<>>), + <<"Cmd">> => maps:get(<<"command">>, Config, []), + <<"Entrypoint">> => maps:get(<<"entrypoint">>, Config, []), + <<"Env">> => maps:get(<<"envs">>, Config, []), + <<"Labels">> => maps:get(<<"labels">>, Config, #{}), + <<"Volumes">> => build_volumes(Config), + <<"User">> => maps:get(<<"user">>, Config, <<>>), + <<"WorkingDir">> => maps:get(<<"working_dir">>, Config, <<>>), + <<"Hostname">> => maps:get(<<"hostname">>, Config, <<>>), + <<"ExposedPorts">> => build_expose(Config), + <<"NetworkingConfig">> => build_networks(Config), + <<"Healthcheck">> => build_healthcheck(Config), + <<"HostConfig">> => fold_merge([ + build_binds(Config), build_volumes(Config), - build_networks(Config), - build_labels(Config), - build_user(Config), - build_working_dir(Config), - build_hostname(Config), - build_healthcheck(Config) + build_restart(Config), + build_privileged(Config), + build_cap_add_drop(Config), + build_devices(Config), + build_memory(Config), + build_cpu(Config), + build_ulimits(Config), + build_tmpfs(Config), + build_sysctls(Config), + build_extra_hosts(Config) ]) - ). + }. %% 工具函数 fold_merge(List) -> @@ -258,26 +256,28 @@ build_expose(Config) -> case Ports of [] -> #{}; _ -> - Exposed = maps:from_list([{<

>, #{}} || P <- Ports]), - #{<<"ExposedPorts">> => Exposed} + maps:from_list([{<

>, #{}} || P <- Ports]) end. build_volumes(Config) -> Vols = maps:get(<<"volumes">>, Config, []), case Vols of - [] -> #{}; + [] -> + #{}; _ -> - HostBinds = Vols, - VolMap = maps:from_list(lists:map(fun(V) -> + maps:from_list(lists:map(fun(V) -> [_Host, Cont] = binary:split(V, <<":">>, []), {Cont, #{}} - end, Vols)), - #{ - <<"HostConfig">> => #{ - <<"Binds">> => HostBinds - }, - <<"Volumes">> => VolMap - } + end, Vols)) + end. + +build_binds(Config) -> + Vols = maps:get(<<"volumes">>, Config, []), + case Vols of + [] -> + #{}; + _ -> + #{<<"Binds">> => Vols} end. build_networks(Config) -> @@ -289,37 +289,6 @@ build_networks(Config) -> #{<<"NetworkingConfig">> => #{<<"EndpointsConfig">> => NetCfg}} end. -build_labels(Config) -> - Labels = maps:get(<<"labels">>, Config, #{}), - case maps:size(Labels) of - 0 -> #{}; - _ -> #{<<"Labels">> => Labels} - end. - - -build_user(Config) -> - case maps:get(<<"user">>, Config, undefined) of - undefined -> - #{}; - U -> - #{<<"User">> => U} - end. - -build_working_dir(Config) -> - case maps:get(<<"working_dir">>, Config, undefined) of - undefined -> - #{}; - D -> - #{<<"WorkingDir">> => D} - end. - -build_hostname(Config) -> - case maps:get(<<"hostname">>, Config, undefined) of - undefined -> - #{}; - H -> - #{<<"Hostname">> => H} - end. parse_mem(Val) -> case binary:last(Val) of @@ -333,20 +302,18 @@ parse_mem(Val) -> list_to_integer(binary_to_list(Val)) end. - - build_healthcheck(Config) -> HC = maps:get(<<"healthcheck">>, Config, #{}), case maps:size(HC) of - 0 -> #{}; + 0 -> + #{}; _ -> - HCMap = #{ + #{ <<"Test">> => maps:get(<<"test">>, HC, []), <<"Interval">> => parse_duration(maps:get(<<"interval">>, HC, <<"0s">>)), <<"Timeout">> => parse_duration(maps:get(<<"timeout">>, HC, <<"0s">>)), <<"Retries">> => maps:get(<<"retries">>, HC, 0) - }, - #{<<"Healthcheck">> => HCMap} + } end. parse_duration(Bin) -> @@ -387,7 +354,7 @@ build_restart(Config) -> undefined -> #{}; Policy -> - #{<<"RestartPolicy">> => #{<<"Name">> => Policy}} + #{<<"RestartPolicy">> => #{<<"Name">> => Policy}} end. build_privileged(Config) -> @@ -496,5 +463,5 @@ build_extra_hosts(Config) -> [] -> #{}; _ -> - #{<<"ExtraHosts">> => Hosts} + #{<<"ExtraHosts">> => Hosts} end. \ No newline at end of file