public Container createContainer()

in karavan-app/src/main/java/org/apache/camel/karavan/docker/DockerService.java [177:239]


    public Container createContainer(String name, String image, List<String> env, Map<Integer, Integer> ports,
                                     HealthCheck healthCheck, Map<String, String> labels,
                                     List<DockerComposeVolume> volumes, String network, RestartPolicy restartPolicy,
                                     PULL_IMAGE pullImage, String cpus, String cpu_percent, String mem_limit, String mem_reservation,
                                     String dockerCommand) throws InterruptedException {
        List<Container> containers = findContainer(name);
        if (containers.isEmpty()) {
            if (Objects.equals(labels.get(LABEL_TYPE), ContainerType.devmode.name())
                    || Objects.equals(labels.get(LABEL_TYPE), ContainerType.build.name())
                    || Objects.equals(labels.get(LABEL_TYPE), ContainerType.devservice.name())) {
                LOGGER.info("Pulling DevMode image from DockerHub: " + image);
                pullImageFromDockerHub(image, Objects.equals(pullImage, PULL_IMAGE.always));
            }
            if (Objects.equals(labels.get(LABEL_TYPE), ContainerType.packaged.name())) {
                LOGGER.info("Pulling Project image from Registry: " + image);
                pullImage(image, Objects.equals(pullImage, PULL_IMAGE.always));
            }

            Ports portBindings = DockerUtils.getPortBindings(ports);
            List<ExposedPort> exposePorts = DockerUtils.getExposedPorts(ports);
            try (CreateContainerCmd createContainerCmd = getDockerClient().createContainerCmd(image)
                    .withName(name).withLabels(labels).withEnv(env).withHostName(name).withExposedPorts(exposePorts).withHealthcheck(healthCheck)) {

                List<Mount> mounts = new ArrayList<>();
                if (volumes != null && !volumes.isEmpty()) {
                    volumes.forEach(volume -> {
                        var mount = new Mount().withType(MountType.valueOf(volume.getType().toUpperCase())).withTarget(volume.getTarget());
                        if (volume.getSource() != null) {
                            mount = mount.withSource(volume.getSource());
                        }
                        mounts.add(mount);
                    });
                }
                if (dockerCommand != null) {
                    createContainerCmd.withCmd("/bin/sh", "-c", dockerCommand);
                    System.out.println(dockerCommand);
                }
                if (Objects.equals(labels.get(LABEL_PROJECT_ID), ContainerType.build.name())) {
                    mounts.add(new Mount().withType(MountType.BIND).withSource("/var/run/docker.sock").withTarget("/var/run/docker.sock"));
                }

                createContainerCmd.withHostConfig(new HostConfig()
                        .withRestartPolicy(restartPolicy)
                        .withPortBindings(portBindings)
                        .withMounts(mounts)
                        .withMemory(DockerUtils.parseMemory(mem_limit))
                        .withMemoryReservation(DockerUtils.parseMemory(mem_reservation))
                        .withCpuPercent(NumberUtils.toLong(cpu_percent))
                        .withNanoCPUs(NumberUtils.toLong(cpus))
                        .withNetworkMode(network != null ? network : networkName));

                CreateContainerResponse response = createContainerCmd.exec();
                LOGGER.info("Container created: " + response.getId());

                try (ListContainersCmd cmd = getDockerClient().listContainersCmd().withShowAll(true).withIdFilter(Collections.singleton(response.getId()))) {
                    return cmd.exec().get(0);
                }
            }
        } else {
            LOGGER.info("Container already exists: " + containers.get(0).getId());
            return containers.get(0);
        }
    }