Java源码示例:com.spotify.docker.client.messages.PortBinding

示例1
private ContainerConfig setContainerConfig(String methodName, String className) {

        Map<String, String> labels = new HashMap<>(2);
        labels.put("testMethodName", methodName);
        labels.put("testClassName", className);

        HostConfig hostConfig = HostConfig.builder()
                .portBindings(ImmutableMap.of(DOCKER_CLIENT_PORT + "/tcp", Arrays.asList(PortBinding.
                        of(LoginClient.MESOS_MASTER, DOCKER_CLIENT_PORT)))).networkMode("docker_gwbridge").build();

        ContainerConfig containerConfig = ContainerConfig.builder()
                .hostConfig(hostConfig)
                .image(IMAGE)
                .user("root")
                .workingDir("/data")
                .cmd("sh", "-c", "java -DmasterIP=" + LoginClient.MESOS_MASTER + " -DexecType=" + getConfig("execType",
                        "LOCAL") + " -Dlog.level=" + LOG_LEVEL +  " -cp /data/build/libs/test-docker-collection.jar io.pravega.test.system." +
                        "SingleJUnitTestRunner " + className + "#" + methodName + " > server.log 2>&1")
                .labels(labels)
                .build();

        return containerConfig;
    }
 
示例2
@Override
@Nullable
public String getHostTcpPort(final String containerPort) {
  Map<String, List<PortBinding>> hostPortBindings = hostPortBindings().orElse(emptyMap());
  List<PortBinding> portBindings = hostPortBindings.get(containerPort + "/tcp");

  if (isNull(portBindings) || portBindings.isEmpty()) {
    // be kind and attempt to find without appendix of tcp
    portBindings = hostPortBindings.get(containerPort);
  }

  if (nonNull(portBindings) && !portBindings.isEmpty()) {
    PortBinding portBinding = portBindings.get(0);

    if(nonNull(portBinding)) {
      return portBinding.hostPort();
    }
  }

  return null;
}
 
示例3
/**
 * Retrieve the host ports that were opened at runtime for communicating with the docker container. This method
 * is only useful to call after the container is started as the host ports are not known before.
 *
 * @return Optional {@link Map} of container port keys with a {@link List} of {@link PortBinding}s
 */
public Optional<Map<String, List<PortBinding>>> hostPortBindings() {
  // reuse existing containers if they are running
  if (nonNull(startedContainer)) {
    try {
      log.info("Inspecting container '{}' for host ports.", left(startedContainer.id(), SHORT_ID_LENGTH));

      return ofNullable(dockerClient.inspectContainer(startedContainer.id()).networkSettings().ports());
    }
    catch (DockerException | InterruptedException e) {
      log.error("Unable to inspect container for host ports '{}'", left(startedContainer.id(), SHORT_ID_LENGTH), e);
    }
  }

  return empty();
}
 
示例4
private static int hostPortNumber(ContainerInfo containerInfo) {
    String redisPortSpec = INTERNAL_PORT + "/tcp";
    PortBinding portBinding;
    try {
        portBinding = Objects.requireNonNull(containerInfo
                .networkSettings()
                .ports())
                .get(redisPortSpec)
                .get(0);
        logger.info("Redis host port: {}", portBinding.hostPort());
        return parseInt(portBinding.hostPort());
    } catch (NullPointerException e) {
        logger.error("Unable to find host port mapping for {} in container {}", redisPortSpec, containerInfo.id());
        throw e;
    }
}
 
示例5
/**
 * Create a port binding configuration for the job.
 *
 * @return The port bindings.
 */
private Map<String, List<PortBinding>> portBindings() {
  final Map<String, List<PortBinding>> bindings = Maps.newHashMap();
  for (final Map.Entry<String, PortMapping> e : job.getPorts().entrySet()) {
    final PortMapping mapping = e.getValue();
    final Integer jobDefinedExtPort = mapping.getExternalPort();

    // If the job didn't specify an external port, use dynamically allocated ports
    final String externalPort = jobDefinedExtPort == null
                                ? ports.get(e.getKey()).toString() : jobDefinedExtPort.toString();

    final PortBinding binding = PortBinding.of(mapping.getIp(), externalPort);
    final String entry = containerPort(mapping.getInternalPort(), mapping.getProtocol());
    bindings.put(entry, Collections.singletonList(binding));
  }
  return bindings;
}
 
示例6
/**
 * Return the first host port bound to the requested container port.
 *
 * @param containerId   The container in which to find the requested port.
 * @param containerPort The container port to resolve to a host port.
 *
 * @return The first host port bound to the requested container port.
 *
 * @throws HeliosDeploymentException when no host port is found.
 */
private String getHostPort(final String containerId, final int containerPort)
    throws HeliosDeploymentException {
  final String heliosPort = String.format("%d/tcp", containerPort);
  try {
    final NetworkSettings settings = dockerClient.inspectContainer(containerId).networkSettings();
    for (final Map.Entry<String, List<PortBinding>> entry : settings.ports().entrySet()) {
      if (entry.getKey().equals(heliosPort)) {
        return entry.getValue().get(0).hostPort();
      }
    }
  } catch (DockerException | InterruptedException e) {
    throw new HeliosDeploymentException(String.format(
        "unable to find port binding for %s in container %s.",
        heliosPort,
        containerId),
        e);
  }
  throw new HeliosDeploymentException(String.format(
      "unable to find port binding for %s in container %s.",
      heliosPort,
      containerId));
}
 
示例7
private static String getPort(Map<String, List<PortBinding>> ports, String internalTCPPort, String label) {
	List<PortBinding> portMappings = ports.get(internalTCPPort + "/tcp");
	if (portMappings == null || portMappings.isEmpty()) {
		LOG.info("| {} Emulator {} --> NOTHING CONNECTED TO {}", label, internalTCPPort + "/tcp");
		return null;
	}

	return portMappings.get(0).hostPort();
}
 
示例8
public DockerContainer startNoVncContainer()
        throws DockerException, InterruptedException {

    DockerContainer novncContainer;
    String novncImage = getConfig().getNovncImage();

    if (containerMap.containsKey(novncImage)) {
        log.debug("noVNC container already available");
        novncContainer = containerMap.get(novncImage);

    } else {
        dockerService.pullImage(novncImage);

        Map<String, List<PortBinding>> portBindings = new HashMap<>();
        String defaultNovncPort = getConfig().getNovncPort();
        portBindings.put(defaultNovncPort,
                asList(randomPort(ALL_IPV4_ADDRESSES)));

        String network = getConfig().getDockerNetwork();
        novncContainer = DockerContainer.dockerBuilder(novncImage)
                .portBindings(portBindings).network(network).build();
        String containerId = dockerService.startContainer(novncContainer);
        String novncHost = dockerService.getHost(containerId, network);
        String novncPort = dockerService.getBindPort(containerId,
                defaultNovncPort + "/tcp");
        String novncUrl = format("http://%s:%s/", novncHost, novncPort);
        novncContainer.setContainerId(containerId);
        novncContainer.setContainerUrl(novncUrl);

        containerMap.put(novncImage, novncContainer);
    }

    return novncContainer;
}
 
示例9
public String getBindPort(String containerId, String exposed)
        throws DockerException, InterruptedException {
    ImmutableMap<String, List<PortBinding>> ports = dockerClient
            .inspectContainer(containerId).networkSettings().ports();
    List<PortBinding> exposedPort = ports.get(exposed);
    log.trace("Port list {} -- Exposed port {} = {}", ports, exposed,
            exposedPort);
    if (ports.isEmpty() || exposedPort.isEmpty()) {
        String dockerImage = dockerClient.inspectContainer(containerId)
                .config().image();
        throw new SeleniumJupiterException("Port " + exposed
                + " is not bindable in container " + dockerImage);
    }
    return exposedPort.get(0).hostPort();
}
 
示例10
private static String startUnauthedRegistry(final DockerClient client) throws Exception {
  final Map<String, List<PortBinding>> ports = singletonMap(
      "5000/tcp", Collections.singletonList(PortBinding.of("0.0.0.0", 5000)));
  final HostConfig hostConfig = HostConfig.builder().portBindings(ports)
      .build();

  final ContainerConfig containerConfig = ContainerConfig.builder()
      .image(REGISTRY_IMAGE)
      .hostConfig(hostConfig)
      .build();

  return startAndAwaitContainer(client, containerConfig, REGISTRY_NAME);
}
 
示例11
private static String startAuthedRegistry(final DockerClient client) throws Exception {
  final Map<String, List<PortBinding>> ports = singletonMap(
      "5000/tcp", Collections.singletonList(PortBinding.of("0.0.0.0", 5000)));
  final HostConfig hostConfig = HostConfig.builder().portBindings(ports)
      .binds(ImmutableList.of(
          Resources.getResource("dockerRegistry/auth").getPath() + ":/auth",
          Resources.getResource("dockerRegistry/certs").getPath() + ":/certs"
      ))
      /*
       *  Mounting volumes requires special permissions on Docker >= 1.10.
       *  Until a proper Seccomp profile is in place, run container privileged.
       */
      .privileged(true)
      .build();

  final ContainerConfig containerConfig = ContainerConfig.builder()
      .image(REGISTRY_IMAGE)
      .hostConfig(hostConfig)
      .env(ImmutableList.of(
          "REGISTRY_AUTH=htpasswd",
          "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm",
          "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd",
          "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt",
          "REGISTRY_HTTP_TLS_KEY=/certs/domain.key",
          "REGISTRY_HTTP_SECRET=super-secret"
      ))
      .build();

  return startAndAwaitContainer(client, containerConfig, REGISTRY_NAME);
}
 
示例12
private static String getPort(Map<String, List<PortBinding>> ports, String internalTCPPort, String label) {
	List<PortBinding> portMappings = ports.get(internalTCPPort + "/tcp");
	if (portMappings == null || portMappings.isEmpty()) {
		LOG.info("| {} Emulator --> NOTHING CONNECTED TO {}/tcp", label, internalTCPPort);
		return null;
	}

	return portMappings.get(0).hostPort();
}
 
示例13
@Before
public void setup() throws Exception {
  this.dockerClient = mock(DockerClient.class);
  this.heliosClient = mock(HeliosClient.class);

  // the anonymous classes to override a method are to workaround the docker-client "messages"
  // having no mutators, fun
  final Info info = mock(Info.class);
  when(info.operatingSystem()).thenReturn("foo");
  when(this.dockerClient.info()).thenReturn(info);

  // mock the call to dockerClient.createContainer so we can test the arguments passed to it
  this.containerConfig = ArgumentCaptor.forClass(ContainerConfig.class);

  final ContainerCreation creation = mock(ContainerCreation.class);
  when(creation.id()).thenReturn(CONTAINER_ID);

  when(this.dockerClient.createContainer(
      this.containerConfig.capture(), anyString())).thenReturn(creation);

  // we have to mock out several other calls to get the HeliosSoloDeployment ctor
  // to return non-exceptionally. the anonymous classes to override a method are to workaround
  // the docker-client "messages" having no mutators, fun
  when(this.dockerClient.info()).thenReturn(info);

  final PortBinding binding = PortBinding.of("192.168.1.1", 5801);
  final ImmutableMap<String, List<PortBinding>> ports =
      ImmutableMap.<String, List<PortBinding>>of("5801/tcp", ImmutableList.of(binding));
  final ContainerInfo containerInfo = mock(ContainerInfo.class);
  final NetworkSettings networkSettings = mock(NetworkSettings.class);
  when(networkSettings.gateway()).thenReturn("a-gate-way");
  when(networkSettings.ports()).thenReturn(ports);
  when(containerInfo.networkSettings()).thenReturn(networkSettings);
  when(this.dockerClient.inspectContainer(CONTAINER_ID)).thenReturn(containerInfo);

  when(this.dockerClient.waitContainer(CONTAINER_ID)).thenReturn(ContainerExit.create(0L));
}
 
示例14
public static void launchDocker() throws DockerException, InterruptedException, DockerCertificateException {
	// Create a client based on DOCKER_HOST and DOCKER_CERT_PATH env vars
	docker = DefaultDockerClient.fromEnv().build();

	terminateAndDiscardAnyExistingContainers(true);

	LOG.info("");
	LOG.info("/===========================================");
	LOG.info("| GCloud Emulator");

	ContainerInfo containerInfo;
	String id;

	try {
		docker.inspectImage(DOCKER_IMAGE_NAME);
	} catch (ImageNotFoundException e) {
		// No such image so we must download it first.
		LOG.info("| - Getting docker image \"{}\"", DOCKER_IMAGE_NAME);
		docker.pull(DOCKER_IMAGE_NAME, message -> {
			if (message.id() != null && message.progress() != null) {
				LOG.info("| - Downloading > {} : {}", message.id(), message.progress());
			}
		});
	}

	// No such container. Good, we create one!
	LOG.info("| - Creating new container");

	// Bind container ports to host ports
	final Map<String, List<PortBinding>> portBindings = new HashMap<>();
	portBindings.put(INTERNAL_PUBSUB_PORT, Collections.singletonList(PortBinding.randomPort("0.0.0.0")));

	final HostConfig hostConfig = HostConfig.builder().portBindings(portBindings).build();

	// Create new container with exposed ports
	final ContainerConfig containerConfig = ContainerConfig.builder()
		.hostConfig(hostConfig)
		.exposedPorts(INTERNAL_PUBSUB_PORT)
		.image(DOCKER_IMAGE_NAME)
		.cmd("sh", "-c", "mkdir -p /opt/data/pubsub ; gcloud beta emulators pubsub start --data-dir=/opt/data/pubsub  --host-port=0.0.0.0:" + INTERNAL_PUBSUB_PORT)
		.build();

	final ContainerCreation creation = docker.createContainer(containerConfig, CONTAINER_NAME_JUNIT);
	id = creation.id();

	containerInfo = docker.inspectContainer(id);

	if (!containerInfo.state().running()) {
		LOG.warn("| - Starting it up ....");
		docker.startContainer(id);
		Thread.sleep(1000);
	}

	containerInfo = docker.inspectContainer(id);

	dockerIpAddress = "127.0.0.1";

	Map<String, List<PortBinding>> ports = containerInfo.networkSettings().ports();

	assertNotNull("Unable to retrieve the ports where to connect to the emulators", ports);
	assertEquals("We expect 1 port to be mapped", 1, ports.size());

	pubsubPort = getPort(ports, INTERNAL_PUBSUB_PORT, "PubSub");

	LOG.info("| Waiting for the emulators to be running");

	// PubSub exposes an "Ok" at the root url when running.
	if (!waitForOkStatus("PubSub", pubsubPort)) {
		// Oops, we did not get an "Ok" within 10 seconds
		startHasFailedKillEverything();
	}
	LOG.info("\\===========================================");
	LOG.info("");
}
 
示例15
public DockerContainer startSelenoidContainer()
        throws DockerException, InterruptedException {

    DockerContainer selenoidContainer;
    String selenoidImage = getConfig().getSelenoidImage();
    boolean recording = getConfig().isRecording()
            || getConfig().isRecordingWhenFailure();

    if (containerMap.containsKey(selenoidImage)) {
        log.trace("Selenoid container already available");
        selenoidContainer = containerMap.get(selenoidImage);
    } else {
        // Pull images
        dockerService.pullImage(selenoidImage);
        String recordingImage = getConfig().getRecordingImage();
        if (recording) {
            dockerService.pullImage(recordingImage);
        }

        // portBindings
        Map<String, List<PortBinding>> portBindings = new HashMap<>();
        String defaultSelenoidPort = getConfig().getSelenoidPort();
        String internalSelenoidPort = defaultSelenoidPort;
        portBindings.put(internalSelenoidPort,
                asList(randomPort(ALL_IPV4_ADDRESSES)));

        // binds
        String defaultSocket = dockerService.getDockerDefaultSocket();
        List<String> binds = new ArrayList<>();
        binds.add(defaultSocket + ":" + defaultSocket);
        if (recording) {
            binds.add(getDockerPath(hostVideoFolder)
                    + ":/opt/selenoid/video");
        }

        // entrypoint & cmd
        List<String> entryPoint = asList("");
        String internalBrowserPort = getConfig().getSelenoidPort();
        String browsersJson = selenoidConfig.getBrowsersJsonAsString();
        String browserTimeout = getConfig()
                .getBrowserSessionTimeoutDuration();
        String network = getConfig().getDockerNetwork();
        String dockerStartupTimeout = getConfig()
                .getDockerStartupTimeoutDuration();

        List<String> cmd = asList("sh", "-c",
                "mkdir -p /etc/selenoid/; echo '" + browsersJson
                        + "' > /etc/selenoid/browsers.json; /usr/bin/selenoid"
                        + " -listen :" + internalBrowserPort
                        + " -service-startup-timeout "
                        + dockerStartupTimeout
                        + " -conf /etc/selenoid/browsers.json"
                        + " -video-output-dir /opt/selenoid/video/"
                        + " -timeout " + browserTimeout
                        + " -container-network " + network + " -limit "
                        + getDockerBrowserCount());

        // envs
        List<String> envs = selenoidConfig.getDockerEnvs();

        if (recording) {
            envs.add("OVERRIDE_VIDEO_OUTPUT_DIR="
                    + getDockerPath(hostVideoFolder));
        }

        // Build container
        DockerBuilder dockerBuilder = DockerContainer
                .dockerBuilder(selenoidImage).portBindings(portBindings)
                .binds(binds).cmd(cmd).entryPoint(entryPoint).envs(envs)
                .network(network);
        selenoidContainer = dockerBuilder.build();
        containerMap.put(selenoidImage, selenoidContainer);

        String containerId = dockerService
                .startContainer(selenoidContainer);
        selenoidContainer.setContainerId(containerId);
        String selenoidHost = dockerService.getHost(containerId, network);
        String selenoidPort = dockerService.getBindPort(containerId,
                internalSelenoidPort + "/tcp");
        String selenoidUrl = format("http://%s:%s/wd/hub", selenoidHost,
                selenoidPort);

        selenoidContainer.setContainerUrl(selenoidUrl);
        log.trace("Selenium server URL {}", selenoidUrl);
    }
    return selenoidContainer;
}
 
示例16
public DockerContainer startAndroidContainer(String androidImage,
        String deviceName, CloudType cloudType)
        throws DockerException, InterruptedException {

    DockerContainer androidContainer;
    if (containerMap.containsKey(androidImage)) {
        log.trace("Android container already available");
        androidContainer = containerMap.get(androidImage);
    } else {
        // Pull image
        dockerService.pullImage(androidImage);

        // portBindings
        Map<String, List<PortBinding>> portBindings = new HashMap<>();
        String internalAppiumPort = getConfig().getAndroidAppiumPort();
        portBindings.put(internalAppiumPort,
                asList(randomPort(ALL_IPV4_ADDRESSES)));
        String internalNoVncPort = getConfig().getAndroidNoVncPort();
        portBindings.put(internalNoVncPort,
                asList(randomPort(ALL_IPV4_ADDRESSES)));

        // binds
        boolean recording = getConfig().isRecording()
                || getConfig().isRecordingWhenFailure();
        List<String> binds = new ArrayList<>();
        if (recording) {
            binds.add(getDockerPath(hostVideoFolder) + ":/tmp/video");
        }
        if (isAndroidLogging()) {
            binds.add(getDockerPath(hostAndroidLogsFolder)
                    + ":/var/log/supervisor");
        }

        // envs
        String network = getConfig().getDockerNetwork();
        List<String> envs = getAndroidEnvs(deviceName, cloudType,
                recording);

        // Build container
        DockerBuilder dockerBuilder = DockerContainer
                .dockerBuilder(androidImage).portBindings(portBindings)
                .binds(binds).envs(envs).network(network).privileged();

        String androidGenymotionDeviceName = getConfig()
                .getAndroidGenymotionDeviceName();
        boolean useGenymotion = cloudType == GENYMOTION_SAAS
                && !isNullOrEmpty(androidGenymotionDeviceName);
        if (useGenymotion) {
            getGenymotionContainer(dockerBuilder,
                    androidGenymotionDeviceName);
        }

        androidContainer = dockerBuilder.build();
        String containerId = dockerService.startContainer(androidContainer);

        if (useGenymotion) {
            String[] disposeDeviceCommand = { "gmtool", "--cloud", "admin",
                    "stopdisposable", androidGenymotionDeviceName };
            finalizerCommandMap.put(containerId, disposeDeviceCommand);
        }

        String androidHost = dockerService.getHost(containerId, network);
        String androidPort = dockerService.getBindPort(containerId,
                internalAppiumPort + "/tcp");

        String appiumUrl = format("http://%s:%s/wd/hub", androidHost,
                androidPort);
        androidContainer.setContainerId(containerId);
        androidContainer.setContainerUrl(appiumUrl);

        String androidNoVncPort = dockerService.getBindPort(containerId,
                internalNoVncPort + "/tcp");
        androidNoVncUrl = format("http://%s:%s/", androidHost,
                androidNoVncPort);

        containerMap.put(androidImage, androidContainer);
    }
    return androidContainer;
}
 
示例17
public synchronized String startContainer(DockerContainer dockerContainer)
        throws DockerException, InterruptedException {
    String imageId = dockerContainer.getImageId();
    log.info("Starting Docker container {}", imageId);
    com.spotify.docker.client.messages.HostConfig.Builder hostConfigBuilder = HostConfig
            .builder();
    com.spotify.docker.client.messages.ContainerConfig.Builder containerConfigBuilder = ContainerConfig
            .builder();

    boolean privileged = dockerContainer.isPrivileged();
    if (privileged) {
        log.trace("Using privileged mode");
        hostConfigBuilder.privileged(true);
        hostConfigBuilder.capAdd("NET_ADMIN", "NET_RAW");
    }
    Optional<String> network = dockerContainer.getNetwork();
    if (network.isPresent()) {
        log.trace("Using network: {}", network.get());
        hostConfigBuilder.networkMode(network.get());
    }
    Optional<Map<String, List<PortBinding>>> portBindings = dockerContainer
            .getPortBindings();
    if (portBindings.isPresent()) {
        log.trace("Using port bindings: {}", portBindings.get());
        hostConfigBuilder.portBindings(portBindings.get());
        containerConfigBuilder.exposedPorts(portBindings.get().keySet());
    }
    Optional<List<String>> binds = dockerContainer.getBinds();
    if (binds.isPresent()) {
        log.trace("Using binds: {}", binds.get());
        hostConfigBuilder.binds(binds.get());
    }
    Optional<List<String>> envs = dockerContainer.getEnvs();
    if (envs.isPresent()) {
        log.trace("Using envs: {}", envs.get());
        containerConfigBuilder.env(envs.get());
    }
    Optional<List<String>> cmd = dockerContainer.getCmd();
    if (cmd.isPresent()) {
        log.trace("Using cmd: {}", cmd.get());
        containerConfigBuilder.cmd(cmd.get());
    }
    Optional<List<String>> entryPoint = dockerContainer.getEntryPoint();
    if (entryPoint.isPresent()) {
        log.trace("Using entryPoint: {}", entryPoint.get());
        containerConfigBuilder.entrypoint(entryPoint.get());
    }

    ContainerConfig createContainer = containerConfigBuilder.image(imageId)
            .hostConfig(hostConfigBuilder.build()).build();
    String containerId = dockerClient.createContainer(createContainer).id();
    dockerClient.startContainer(containerId);

    return containerId;
}
 
示例18
public Optional<Map<String, List<PortBinding>>> getPortBindings() {
    return portBindings;
}
 
示例19
@Override
public Optional<Map<String, List<PortBinding>>> hostPortBindings() {
  return dockerContainerClient.hostPortBindings();
}
 
示例20
public static void launchDocker() throws DockerException, InterruptedException, DockerCertificateException {
	// Create a client based on DOCKER_HOST and DOCKER_CERT_PATH env vars
	docker = DefaultDockerClient.fromEnv().build();

	terminateAndDiscardAnyExistingContainers(true);

	LOG.info("");
	LOG.info("/===========================================");
	LOG.info("| GCloud Emulator");

	ContainerInfo containerInfo;
	String id;

	try {
		docker.inspectImage(DOCKER_IMAGE_NAME);
	} catch (ImageNotFoundException e) {
		// No such image so we must download it first.
		LOG.info("| - Getting docker image \"{}\"", DOCKER_IMAGE_NAME);
		docker.pull(DOCKER_IMAGE_NAME, message -> {
			if (message.id() != null && message.progress() != null) {
				LOG.info("| - Downloading > {} : {}", message.id(), message.progress());
			}
		});
	}

	// No such container. Good, we create one!
	LOG.info("| - Creating new container");

	// Bind container ports to host ports
	final Map<String, List<PortBinding>> portBindings = new HashMap<>();
	portBindings.put(INTERNAL_PUBSUB_PORT, Collections.singletonList(PortBinding.randomPort("0.0.0.0")));

	final HostConfig hostConfig = HostConfig.builder().portBindings(portBindings).build();

	// Create new container with exposed ports
	final ContainerConfig containerConfig = ContainerConfig.builder()
		.hostConfig(hostConfig)
		.exposedPorts(INTERNAL_PUBSUB_PORT)
		.image(DOCKER_IMAGE_NAME)
		.cmd("sh", "-c", "mkdir -p /opt/data/pubsub ; gcloud beta emulators pubsub start --data-dir=/opt/data/pubsub --host-port=0.0.0.0:" + INTERNAL_PUBSUB_PORT)
		.build();

	final ContainerCreation creation = docker.createContainer(containerConfig, CONTAINER_NAME_JUNIT);
	id = creation.id();

	containerInfo = docker.inspectContainer(id);

	if (!containerInfo.state().running()) {
		LOG.warn("| - Starting it up ....");
		docker.startContainer(id);
		Thread.sleep(1000);
	}

	containerInfo = docker.inspectContainer(id);

	dockerIpAddress = "127.0.0.1";

	Map<String, List<PortBinding>> ports = containerInfo.networkSettings().ports();

	assertNotNull("Unable to retrieve the ports where to connect to the emulators", ports);
	assertEquals("We expect 1 port to be mapped", 1, ports.size());

	pubsubPort = getPort(ports, INTERNAL_PUBSUB_PORT, "PubSub");

	LOG.info("| Waiting for the emulators to be running");

	// PubSub exposes an "Ok" at the root url when running.
	if (!waitForOkStatus("PubSub", pubsubPort)) {
		// Oops, we did not get an "Ok" within 10 seconds
		startHasFailedKillEverything();
	}
	LOG.info("\\===========================================");
	LOG.info("");
}
 
示例21
/**
 * Retrieve the {@link PortBinding} that are represented in the container for this host, to request this is only
 * valuable after a containers has been started, as ports are inspected at runtime for random ones assigned.
 *
 * @return Optional of {@link Map} of {@link PortBinding}s.
 */
Optional<Map<String, List<PortBinding>>> hostPortBindings();