Как запустить образ докера stub-runner с локальным репо

Я попытался запустить образ докера-заглушки с локальным репо, как показано ниже:

STUBRUNNER_IDS="cn.xxx.accounting:accounting-configserver:1.0.0:stubs:9876"
STUBRUNNER_REPOSITORY_ROOT="file:///m2/repository"
STUBRUNNER_PORT="8083"
SC_CONTRACT_DOCKER_VERSION=2.0.0.RC2
docker run  --rm --interactive --tty -e "STUBRUNNER_IDS=${STUBRUNNER_IDS}" -e "REPO_WITH_BINARIES_URL=${STUBRUNNER_REPOSITORY_ROOT}" -p "${STUBRUNNER_PORT}:${STUBRUNNER_PORT}" -p "9876:9876" -v ~/.m2:/m2  springcloud/spring-cloud-contract-stub-runner:"${SC_CONTRACT_DOCKER_VERSION}"

Затем я получил ошибку ниже,

Вызвано: org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [org.springframework.cloud.contract.stubrunner.BatchStubRunner]: фабричный метод «batchStubRunner» вызвал исключение; вложенным исключением является java.lang.IllegalStateException: в пути к классам не найдено заглушек для [cn.xxx.accounting:accounting-configserver]

Похоже, stub runner использует путь к классам, чтобы найти заглушку. Как изменить режим заглушки на локальный? Я не могу найти источник dockerfile spring-cloud-contract-stub-runner. Любой env делает это сложно?


person Kane    schedule 14.06.2018    source источник


Ответы (1)


Конечно, достаточно присоединить объем вашего локального .m2 к объему в контейнере. Также вам необходимо пройти STUBRUNNER_STUBS_MODE=REMOTE (https://github.com/spring-cloud/spring-cloud-contract/blob/master/spring-cloud-contract-stub-runner/src/main/java/org/springframework/cloud/contract/stubrunner/spring/StubRunnerProperties.java#L100)

#!/bin/bash

SC_CONTRACT_DOCKER_VERSION="${SC_CONTRACT_DOCKER_VERSION:-1.2.4.BUILD-SNAPSHOT}"
APP_IP="$( ./whats_my_ip.sh )"

# Stub coordinates 'groupId:artifactId:version:classifier'
STUB_GROUP="${STUB_GROUP:-com.example}"
STUB_ARTIFACT="${STUB_ARTIFACT:-bookstore}"
STUB_VERSION="${STUB_VERSION:-0.0.1.RELEASE}"
STUB_PORT="9876"

# Spring Cloud Contract Stub Runner properties
STUBRUNNER_PORT="${STUBRUNNER_PORT:-8083}"
STUBRUNNER_IDS="${STUB_GROUP}:${STUB_ARTIFACT}:${STUB_VERSION}:stubs:${STUB_PORT}"
STUBRUNNER_REPOSITORY_ROOT="http://${APP_IP}:8081/artifactory/libs-release-local"

docker run  --rm -e "STUBRUNNER_IDS=${STUBRUNNER_IDS}" -e "SERVER_PORT=${STUBRUNNER_PORT}" -e "STUBRUNNER_REPOSITORY_ROOT=${STUBRUNNER_REPOSITORY_ROOT}" -p "${STUBRUNNER_PORT}:${STUBRUNNER_PORT}" -p "${STUB_PORT}:${STUB_PORT}"  -v ~/.m2:/root/m2 springcloud/spring-cloud-contract-stub-runner:"${SC_CONTRACT_DOCKER_VERSION}" 

Обратите внимание, что мы используем локальный maven или наш образ докера, но он указывает на ${USER_HOME}/.m2, что AFAIR — это /root/.m2 в Docker.

person Marcin Grzejszczak    schedule 14.06.2018
comment
Похоже на образец в документе пропускает требуемый env STUBRUNNER_STUBS_MODE=REMOTE из-за того, что репозиторий образца является удаленным URL-адресом. Кроме того, исходный репозиторий образа докера springcloud/spring-cloud-contract-stub-runner не ссылается на hub.docker.com, это может помочь найти его при проверке файла докера или сценариев точки входа. - person Kane; 15.06.2018
comment
Да, похоже, что это так. Можете ли вы подать вопрос p, пожалуйста? сегодня постараюсь обновить документы - person Marcin Grzejszczak; 15.06.2018
comment
проверьте эту проблему - person Kane; 15.06.2018
comment
@MarcinGrzejszczak У меня есть банка-заглушка и образ докера springcloud/spring-cloud-contract-stub-runner. Я не хочу, чтобы он работал локально. Итак, есть ли способ объединить обе вещи в образе и запустить один образ с помощью команды docker run imageName? - person Shekhar; 01.03.2021