private void tryPort(Integer internalPort) { String[][] commands = { {"/bin/sh", "-c", format("cat /proc/net/tcp{,6} | awk '{print $2}' | grep -i :%x && echo %s", internalPort, SUCCESS_MARKER)}, {"/bin/sh", "-c", format("nc -vz -w 1 localhost %d && echo %s", internalPort, SUCCESS_MARKER)}, {"/bin/bash", "-c", format("</dev/tcp/localhost/%d && echo %s", internalPort, SUCCESS_MARKER)} }; for (String[] command : commands) { try { if (ExecInContainerPattern.execInContainer(waitStrategyTarget.getContainerInfo(), command).getStdout().contains(SUCCESS_MARKER)) { return; } } catch (Exception e) { throw new IllegalStateException(e); } } throw new IllegalStateException("Socket not listening yet: " + internalPort); } }
@Override protected void waitUntilReady() { final String containerName = waitStrategyTarget.getContainerInfo().getName();
@Override protected void waitUntilReady() { final Set<Integer> externalLivenessCheckPorts = getLivenessCheckPorts(); if (externalLivenessCheckPorts.isEmpty()) { log.debug("Liveness check ports of {} is empty. Not waiting.", waitStrategyTarget.getContainerInfo().getName()); return; } @SuppressWarnings("unchecked") List<Integer> exposedPorts = waitStrategyTarget.getExposedPorts(); final Set<Integer> internalPorts = getInternalPorts(externalLivenessCheckPorts, exposedPorts); Callable<Boolean> internalCheck = new InternalCommandPortListeningCheck(waitStrategyTarget, internalPorts); Callable<Boolean> externalCheck = new ExternalPortListeningCheck(waitStrategyTarget, externalLivenessCheckPorts); try { Unreliables.retryUntilTrue((int) startupTimeout.getSeconds(), TimeUnit.SECONDS, () -> getRateLimiter().getWhenReady(() -> internalCheck.call() && externalCheck.call())); } catch (TimeoutException e) { throw new ContainerLaunchException("Timed out waiting for container port to open (" + waitStrategyTarget.getContainerIpAddress() + " ports: " + externalLivenessCheckPorts + " should be listening)"); } }
private void tryPort(Integer internalPort) { String[][] commands = {{"/bin/sh", "-c", format("cat /proc/net/tcp{,6} | awk \'{print $2}\' | grep -i :%x && echo %s", internalPort, SUCCESS_MARKER)}, {"/bin/sh", "-c", format("nc -vz -w 1 localhost %d && echo %s", internalPort, SUCCESS_MARKER)}, {"/bin/bash", "-c", format("</dev/tcp/localhost/%d && echo %s", internalPort, SUCCESS_MARKER)}}; for (String[] command : commands) { try { if (ExecInContainerPattern.execInContainer(waitStrategyTarget.getContainerInfo(), command).getStdout().contains(SUCCESS_MARKER)) { return; } } catch (Exception e) { throw new IllegalStateException(e); } } throw new IllegalStateException("Socket not listening yet: " + internalPort); }
@Override protected void waitUntilReady() { final String containerName = waitStrategyTarget.getContainerInfo().getName(); final Integer livenessCheckPort = livenessPort.map(waitStrategyTarget::getMappedPort).orElseGet(() -> { final Set<Integer> livenessCheckPorts = getLivenessCheckPorts();
@Override protected void waitUntilReady() { final Set<Integer> externalLivenessCheckPorts = getLivenessCheckPorts(); if (externalLivenessCheckPorts.isEmpty()) { log.debug("Liveness check ports of {} is empty. Not waiting.", waitStrategyTarget.getContainerInfo().getName()); return; } @SuppressWarnings("unchecked") List<Integer> exposedPorts = waitStrategyTarget.getExposedPorts(); final Set<Integer> internalPorts = getInternalPorts(externalLivenessCheckPorts, exposedPorts); Callable<Boolean> internalCheck = new InternalCommandPortListeningCheck(waitStrategyTarget, internalPorts); Callable<Boolean> externalCheck = new ExternalPortListeningCheck(waitStrategyTarget, externalLivenessCheckPorts); try { Unreliables.retryUntilTrue((int) startupTimeout.getSeconds(), TimeUnit.SECONDS, () -> getRateLimiter().getWhenReady(() -> internalCheck.call() && externalCheck.call())); } catch (TimeoutException e) { throw new ContainerLaunchException("Timed out waiting for container port to open (" + waitStrategyTarget.getContainerIpAddress() + " ports: " + externalLivenessCheckPorts + " should be listening)"); } }
@Override protected boolean isReady() { String containerId = waitStrategyTarget.getContainerId(); log.debug("Check Aerospike container {} status", containerId); InspectContainerResponse containerInfo = waitStrategyTarget.getContainerInfo(); if (containerInfo == null) { log.debug("Aerospike container[{}] doesn't contain info. Abnormal situation, should not happen.", containerId); return false; } int port = getMappedPort(containerInfo.getNetworkSettings(), properties.port); String host = DockerClientFactory.instance().dockerHostIpAddress(); //TODO: Remove dependency to client https://www.aerospike.com/docs/tools/asmonitor/common_tasks.html try (AerospikeClient client = new AerospikeClient(host, port)) { return client.isConnected(); } catch (AerospikeException.Connection e) { log.debug("Aerospike container: {} not yet started. {}", containerId, e.getMessage()); } return false; }