in containers-docker-local/src/main/java/org/apache/aries/containers/docker/local/impl/LocalDockerServiceManager.java [188:234]
List<ContainerImpl> discoverContainers(ServiceConfig config) throws IOException {
List<ContainerImpl> res = new ArrayList<>();
List<String> ids = getDockerIDs(config);
if (ids.size() == 0)
return Collections.emptyList();
String infoJSON = docker.inspect(ids);
List<Object> data = new JSONParser(infoJSON).getParsedList();
for (Object d : data) {
if (!(d instanceof Map))
continue;
Map m = (Map) d;
Object ns = m.get("NetworkSettings");
Map<Integer, Integer> ports = new HashMap<>();
if (ns instanceof Map) {
Object pd = ((Map) ns).get("Ports");
if (pd instanceof Map) {
Map pm = (Map) pd;
for(Map.Entry entry : (Set<Map.Entry>) pm.entrySet()) {
try {
String key = entry.getKey().toString();
int idx = key.indexOf('/');
if (idx > 0)
key = key.substring(0, idx);
int containerPort = Integer.parseInt(key);
int hostPort = -1;
for (Object val : (List) entry.getValue()) {
if (val instanceof Map) {
hostPort = Integer.parseInt(((Map) val).get("HostPort").toString());
}
}
if (hostPort != -1) {
ports.put(containerPort, hostPort);
}
} catch (Exception nfe) {
// ignore parsing exceptions, try next one
}
}
}
}
// TODO check that the settings match!
res.add(new ContainerImpl(m.get("Id").toString(), LocalDockerServiceManager.getContainerHost(), ports));
}
return res;
}