Насколько я знаю, конфигурация docker-compose.yml
не обеспечивает функции, которую вы наметили в своем вопросе.Образ сервиса, содержащий опцию build: .
, всегда будет построен изолированно.Однако вы можете достичь того, чего хотите, другими способами.
Подводя итог, можно сказать, что рассматриваемая служба - это докеризированный проект Java / Maven / Spring-Boot, который опирается на докеризированную базу данных MySQL, и доступ к этой базе данныхтребуется для построения вашего проекта с mvn clean package
, вероятно, из-за наличия интеграционных тестов на этапе test
Maven.
Чтобы преодолеть это, я вижу два возможных подхода (первый подход менее стандартный и менеепроще в реализации, чем второй, поэтому я подробно остановлюсь на последнем):
Вы можете положиться на docker-maven-plugin для вращенияMySQL контейнер напрямую от Maven.Смотрите также эту статью блога .Практическая проблема здесь заключается в том, что команды docker
не доступны напрямую внутри рассматриваемого контейнера Docker, если вы не используете DinD (Docker-in-Docker).
Более простой подход включал бы адаптацию самих тестов, а не изменение настроек докера:
- это ближе к стандартным соглашениям, предполагая, что
mvn test
(инициируется mvn package
) предназначается для юнит-тестов, в то время какmvn verify
(с использованием плагина failsafe Maven) предназначен для интеграционных тестов с привлечением внешних баз данных или служб; по-прежнему - , если вы все равно хотите сохранить ряд модульных тестов с использованием базы данныхоперациях, вы можете использовать механизм базы данных в памяти, такой как H2 , который часто используется в контексте модульных тестов Spring Boot (см., например, , туториал );
тогда вы можете перенести свои интеграционные тесты в дополнительный сервис docker-compose, следуя схеме подхода в этого урока и эта статья , например:
integrationtest:
build: ./integrationtest
command: ./wait-for-it.sh -h db -p 3306 -s -t 150 -- mvn verify
depends:
- db
Отметим, что свойство links:
теперь устарело .
Обратите также внимание, что приведенный выше отрывок .yml
основан на wait-for-it , поскольку свойство depends:
ожидает только запуска контейнеров зависимостей, а не их полной готовности.