Версия Docker-Compose не поддерживается - PullRequest
0 голосов
/ 16 октября 2019

Я использую TestContainers для запуска dgraph.

Вот мой тестовый код:

package net.dgraph.java.client

import io.dgraph.DgraphAsyncClient
import io.dgraph.DgraphClient
import org.testcontainers.containers.DockerComposeContainer
import org.testcontainers.containers.GenericContainer
import org.testcontainers.spock.Testcontainers
import spock.lang.Shared
import spock.lang.Specification

import java.time.Duration
import java.time.temporal.ChronoUnit

@Testcontainers
public class DGraphTest extends Specification {
private SyncSigmaDgraphClient syncClient
private AsyncSigmaDGraphClient asyncClient
private static address
static DockerComposeContainer compose

def setup() {
   syncClient  = SigmaDgraphClientBuilder
            .create()
            .withHost(address)
            .withPort(port1)
            .buildSync()
}
static {
    compose =
            new DockerComposeContainer(
                    new File("src/test/resources/docker-compose.yaml"))
    compose.start()
    this.address = compose.getServiceHost("dgraph", 8080)
    this.port1 = compose.getServicePort("dgraph",8080)
}

И мой файл docker-compose.yaml выглядит так:

version: "3.2"
services:
  zero:
    image: dgraph/dgraph:latest
    volumes:
      - /tmp/data:/dgraph
    ports:
      - 5080:5080
      - 6080:6080
    restart: on-failure
    command: dgraph zero --my=zero:5080
  alpha:
    image: dgraph/dgraph:latest
    volumes:
      - /tmp/data:/dgraph
    ports:
      - 8080:8080
      - 9080:9080
    restart: on-failure
    command: dgraph alpha --my=alpha:7080 --lru_mb=2048 --zero=zero:5080
  ratel:
    image: dgraph/dgraph:latest
    ports:
      - 8000:8000
    command: dgraph-ratel

Моя версия Docker Docker version 19.03.2, build 6a30dfc, а моя версия Docker-compose docker-compose version 1.24.1, build 4667896b .

Однако я получаю следующую ошибку:

[main] ERROR ? [docker/compose:1.8.0] - Log output from the failed container:
Version in "src/test/resources/docker-compose.yaml" is unsupported. You might be seeing this error because you're using the wrong Compose file version. Either specify a version of "2" (or "2.0") and place your service definitions under the `services` key, or omit the `version` key and place your service definitions at the root of the file to use version 1.

Одна часть, которую я нахожу интересной, состоит в том, что журнал ошибок показывает docker / compose: 1.8.0, которая является более старой версией, чем та,Я сейчас бегу. Я пытался изменить версии в моем docker-compose, но, похоже, это не работает. Я посмотрел на другие вопросы, которые имеют ту же ошибку, и ни одно из их решений не работает. Я чувствую, что библиотека TestContainer использует более старую версию docker-compose, чем я, но если это проблема, то я не знаю, как ее исправить.

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Полагаю, вам нужен локальный режим компоновки:

compose =
        new DockerComposeContainer(
                new File("src/test/resources/docker-compose.yaml")).withLocalCompose(true)

См. Документацию локального компоновки для получения более подробной информации:

Вы можете переопределить Testcontainers 'поведение по умолчанию и заставить его использовать исполняемый файл docker-compose, установленный на локальной машине. Это обычно дает опыт, более близкий к запуску docker-compose локально, с оговоркой, что Docker Compose должен присутствовать на машинах dev и CI.

0 голосов
/ 04 ноября 2019

Я использовал этот метод в конечном итоге:

Я использовал Network.newNetwork(), чтобы связать ноль и альфа-экземпляр вместе. Я использовал отладку и docker logs, чтобы увидеть сообщение о том, что dgraph zero должен ждать для успешного запуска.

 static {
    Network network = Network.newNetwork()
    dgraph_zero = new GenericContainer<>("dgraph/dgraph")
            .withExposedPorts(5080)
            .withNetworkAliases("zero")
            .withStartupTimeout(Duration.of(1, ChronoUnit.MINUTES))
            .withCommand("dgraph zero --my=zero:5080")
            .withNetwork(network)
            .waitingFor(Wait.forLogMessage('.* Updated Lease id: 1.*\\n',1))
    dgraph_zero.start()

  dgraph_alpha = new GenericContainer<>("dgraph/dgraph")
        .withExposedPorts(9080)
        .withStartupTimeout(Duration.of(1, ChronoUnit.MINUTES))
        .withNetworkAliases("alpha")
        .withCommand("dgraph alpha --my=alpha:7080 --lru_mb=2048 --zero=zero:5080")
        .withNetwork(network)
        .waitingFor(Wait.forLogMessage(".*Server is ready.*\\n",1))
    dgraph_alpha.start()

    this.address = dgraph_alpha.containerIpAddress
    this.port1 = dgraph_alpha.getMappedPort(9080)

    ManagedChannel channel = ManagedChannelBuilder
            .forAddress(address,port1)
            .usePlaintext()
            .build();
    DgraphGrpc.DgraphStub stub = DgraphGrpc.newStub(channel);
    this.dgraphclient = new DgraphClient(stub) ;
    Transaction txn = this.dgraphclient.newTransaction();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...