Превышено время ожидания открытия порта контейнера (порты localhost: [32773] должен прослушивать) - PullRequest
1 голос
/ 19 мая 2019

Я пытаюсь использовать https://github.com/testcontainers/testcontainers-scala, который присущ https://www.testcontainers.org/, следующим образом:

final class MessageSpec extends BddSpec
  with ForAllTestContainer
  with BeforeAndAfterAll {


  override val container = GenericContainer("sweetsoft/sapmock").configure{ c =>
    c.addExposedPort(8080)
    c.withNetwork(Network.newNetwork())
  }

  override def beforeAll() {
  }


  feature("Process incoming messages") {  

Когда я запускаю тест с командой sbt test, яполучено следующее исключение:

15:22:23.171 [pool-7-thread-2] ERROR ? [sweetsoft/sapmock:latest] - Could not start container
org.testcontainers.containers.ContainerLaunchException: Timed out waiting for container port to open (localhost ports: [32775] should be listening)
        at org.testcontainers.containers.wait.strategy.HostPortWaitStrategy.waitUntilReady(HostPortWaitStrategy.java:47)
        at org.testcontainers.containers.wait.strategy.AbstractWaitStrategy.waitUntilReady(AbstractWaitStrategy.java:35)
        at org.testcontainers.containers.wait.HostPortWaitStrategy.waitUntilReady(HostPortWaitStrategy.java:23)
        at org.testcontainers.containers.wait.strategy.AbstractWaitStrategy.waitUntilReady(AbstractWaitStrategy.java:35)
        at org.testcontainers.containers.GenericContainer.waitUntilContainerStarted(GenericContainer.java:582)

Изображение является локальным образом:

docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
sweetsoft/sapmock             latest              f02be90356e7        3 hours ago         664MB
openjdk                       8                   bec43387959a        11 days ago         625MB
quay.io/testcontainers/ryuk   0.2.3               64849fd2d464        3 months ago        10.7MB

Вопрос в том, почему он ожидает порт 32775?А для чего хорош порт?

Обновление

Может быть, этот журнал поможет:

15:47:47.274 [pool-7-thread-4] INFO org.testcontainers.dockerclient.DockerClientProviderStrategy - Found Docker environment with Environment variables, system properties and defaults. Resolved: 
    dockerHost=unix:///var/run/docker.sock
    apiVersion='{UNKNOWN_VERSION}'
    registryUrl='https://index.docker.io/v1/'
    registryUsername='developer'
    registryPassword='null'
    registryEmail='null'
    dockerConfig='DefaultDockerClientConfig[dockerHost=unix:///var/run/docker.sock,registryUsername=developer,registryPassword=<null>,registryEmail=<null>,registryUrl=https://index.docker.io/v1/,dockerConfigPath=/home/developer/.docker,sslConfig=<null>,apiVersion={UNKNOWN_VERSION},dockerConfig=<null>]'

15:47:47.275 [pool-7-thread-4] INFO org.testcontainers.DockerClientFactory - Docker host IP address is localhost
15:47:47.277 [pool-7-thread-4] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: com.github.dockerjava.core.exec.InfoCmdExec@51a07bb5
15:47:47.389 [pool-7-thread-4] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: com.github.dockerjava.core.exec.VersionCmdExec@70fc9b37
15:47:47.392 [pool-7-thread-4] INFO org.testcontainers.DockerClientFactory - Connected to docker: 
  Server Version: 18.09.6
  API Version: 1.39
  Operating System: Ubuntu 18.04.2 LTS
  Total Memory: 7976 MB
15:47:47.395 [pool-7-thread-4] DEBUG com.github.dockerjava.core.command.AbstrDockerCmd - Cmd: ListImagesCmdImpl[imageNameFilter=quay.io/testcontainers/ryuk:0.2.3,showAll=false,filters=com.github.dockerjava.core.util.FiltersBuilder@0,execution=com.github.dockerjava.core.exec.ListImagesCmdExec@562a343]
15:47:47.417 [pool-7-thread-4] DEBUG org.testcontainers.utility.RegistryAuthLocator - Looking up auth config for image: quay.io/testcontainers/ryuk:0.2.3
15:47:47.417 [pool-7-thread-4] DEBUG org.testcontainers.utility.RegistryAuthLocator - RegistryAuthLocator has configFile: /home/developer/.docker/config.json (does not exist) and commandPathPrefix: 
15:47:47.418 [pool-7-thread-4] WARN org.testcontainers.utility.RegistryAuthLocator - Failure when attempting to lookup auth config (dockerImageName: quay.io/testcontainers/ryuk:0.2.3, configFile: /home/developer/.docker/config.json. Falling back to docker-java default behaviour. Exception message: /home/developer/.docker/config.json (No such file or directory)
15:47:47.418 [pool-7-thread-4] DEBUG org.testcontainers.dockerclient.auth.AuthDelegatingDockerClientConfig - Effective auth config [null]

1 Ответ

2 голосов
/ 24 мая 2019

В исходной java-библиотеке есть ответ на ваш вопрос о порте.
https://www.testcontainers.org/features/networking/

Обратите внимание, что этот номер открытого порта с точки зрения контейнер.

С точки зрения хоста, тестконтейнеры фактически выставляют это на произвольный свободный порт. Это сделано для того, чтобы избежать конфликтов портов, которые могут возникают с локально работающим программным обеспечением или между параллельными тестовыми прогонами.

Поскольку существует этот слой косвенности, необходимо спросить Testcontainers для фактического сопоставленного порта во время выполнения. Это можно сделать используя метод getMappedPort, который принимает оригинал (контейнер) порт в качестве аргумента

В библиотеке Scala вы можете получить этот подключенный порт, позвонив по номеру

container.mappedPort(yourExposedPort) 

Ошибка, скорее всего, связана с этим понятием, вам нужно заранее открыть этот порт внутри образа докера. Убедитесь, что у вас либо есть команда expose 8080 где-нибудь в вашем докер-файле, либо у любого образа, который используется для сборки вашего, есть

...