|
28 | 28 | public final class Ports { |
29 | 29 |
|
30 | 30 | private static final Pattern PORT_PATTERN = Pattern.compile("((\\d+).(\\d+).(\\d+).(\\d+)):(\\d+)->(\\d+)/tcp"); |
| 31 | + private static final Pattern PORT_RANGE_PATTERN = |
| 32 | + Pattern.compile("((\\d+).(\\d+).(\\d+).(\\d+)):(\\d+)-(\\d+)->(\\d+)-(\\d+)/tcp"); |
31 | 33 | private static final int IP_ADDRESS = 1; |
32 | 34 | private static final int EXTERNAL_PORT = 6; |
33 | 35 | private static final int INTERNAL_PORT = 7; |
| 36 | + private static final int EXTERNAL_PORT_RANGE_START = 6; |
| 37 | + private static final int EXTERNAL_PORT_RANGE_END = 7; |
| 38 | + private static final int INTERNAL_PORT_RANGE_START = 8; |
| 39 | + private static final int INTERNAL_PORT_RANGE_END = 9; |
34 | 40 |
|
35 | 41 | private static final String NO_IP_ADDRESS = "0.0.0.0"; |
36 | 42 |
|
@@ -60,6 +66,24 @@ public static Ports parseFromDockerComposePs(String psOutput, String dockerMachi |
60 | 66 |
|
61 | 67 | ports.add(new DockerPort(ip, externalPort, internalPort)); |
62 | 68 | } |
| 69 | + Matcher rangeMatcher = PORT_RANGE_PATTERN.matcher(psOutput); |
| 70 | + while (rangeMatcher.find()) { |
| 71 | + String matchedIpAddress = rangeMatcher.group(IP_ADDRESS); |
| 72 | + String ip = matchedIpAddress.equals(NO_IP_ADDRESS) ? dockerMachineIp : matchedIpAddress; |
| 73 | + int externalPortRangeStart = Integer.parseInt(rangeMatcher.group(EXTERNAL_PORT_RANGE_START)); |
| 74 | + int externalPortRangeEnd = Integer.parseInt(rangeMatcher.group(EXTERNAL_PORT_RANGE_END)); |
| 75 | + int internalPortRangeStart = Integer.parseInt(rangeMatcher.group(INTERNAL_PORT_RANGE_START)); |
| 76 | + int internalPortRangeEnd = Integer.parseInt(rangeMatcher.group(INTERNAL_PORT_RANGE_END)); |
| 77 | + int len = externalPortRangeEnd - externalPortRangeStart; |
| 78 | + // Sanity check |
| 79 | + if (len == internalPortRangeEnd - internalPortRangeStart) { |
| 80 | + for (int i = 0; i <= len; i++) { |
| 81 | + int externalPort = externalPortRangeStart + i; |
| 82 | + int internalPort = internalPortRangeStart + i; |
| 83 | + ports.add(new DockerPort(ip, externalPort, internalPort)); |
| 84 | + } |
| 85 | + } |
| 86 | + } |
63 | 87 | return new Ports(ports); |
64 | 88 | } |
65 | 89 |
|
|
0 commit comments