Files
devstar/services/devstar_devcontainer/docker_agent/AssignDevcontainerGettingDockerOperator.go
xinitx b5f8d41d34 !20 [Fix] OpenDevcontainer docker获取端口号
* add error info
* change readme
* change readme
* add docker getting api
2024-11-05 12:13:42 +00:00

45 lines
1.3 KiB
Go

package docker_agent
import (
"context"
"strconv"
"code.gitea.io/gitea/modules/log"
devcontainer_service_errors "code.gitea.io/gitea/services/devstar_devcontainer/errors"
devcontainer_service_options "code.gitea.io/gitea/services/devstar_devcontainer/options"
)
func AssignDevcontainerGettingDockerOperator(ctx *context.Context, opts *devcontainer_service_options.OpenDevcontainerAppDispatcherOptions) (uint16, error) {
// 1. 创建docker client
cli, err := CreateDockerClient(ctx)
defer cli.Close()
if err != nil {
return 0, err
}
// 获取容器详细信息
containerJSON, err := cli.ContainerInspect(context.Background(), opts.Name)
if err != nil {
return 0, err
}
// 获取端口映射信息
portBindings := containerJSON.NetworkSettings.Ports
for containerPort, bindings := range portBindings {
for _, binding := range bindings {
log.Info("Container Port %s is mapped to Host Port %s on IP %s\n", containerPort, binding.HostPort, binding.HostIP)
if containerPort.Port() == "22" {
v, err := strconv.ParseUint(binding.HostPort, 10, 16)
if err != nil {
return 0, err
}
return uint16(v), nil
}
}
}
return 0, devcontainer_service_errors.ErrOperateDevcontainer{
Action: "Open DevContainer in docker",
Message: err.Error(),
}
}