in executors/docker/docker.go [1559:1598]
func (e *executor) getContainerExposedPorts(container *types.Container) ([]int, error) {
inspect, err := e.client.ContainerInspect(e.Context, container.ID)
if err != nil {
return nil, err
}
for _, env := range inspect.Config.Env {
key, val, ok := strings.Cut(env, "=")
if !ok {
continue
}
if strings.EqualFold(key, "HEALTHCHECK_TCP_PORT") {
port, err := strconv.ParseInt(val, 10, 32)
if err != nil {
return nil, fmt.Errorf("invalid health check tcp port: %v", val)
}
return []int{int(port)}, nil
}
}
// maxPortsCheck is the maximum number of ports that we'll check to see
// if a service is running
const maxPortsCheck = 20
var ports []int
for port := range inspect.Config.ExposedPorts {
start, end, err := port.Range()
if err == nil && port.Proto() == "tcp" {
for i := start; i <= end && len(ports) < maxPortsCheck; i++ {
ports = append(ports, i)
}
}
}
sort.Ints(ports)
return ports, nil
}