Для этого вам нужен только один контейнер. Пусть его основная команда будет сценарием оболочки, который сначала запускает тесты, а затем генерирует отчет HTML.
#!/bin/sh
make test
RC=$?
make html
exit "$RC"
CMD ["./run_tests_and_report.sh"]
Вы также можете сделать что-то подобное, вызвав обе цели Makefile вместе
CMD ["make", "test", "html"]
(хотя это не сгенерирует отчет, если тесты сообщат ненулевой код завершения).
В вашем текущем подходе есть две проблемы. Во-первых, у контейнера Docker есть только одна точка входа и одна команда, поэтому, когда ваш пример Dockerfile имеет две строки CMD
, вторая - это та, которая вступает в силу, и оба контейнера работают make html
. Второе - это то, что Docker Compose почти не имеет опций синхронизации, и, в частности, нет способа заставить генерацию отчетов ожидать завершения выполнения теста до sh (если вы как-то не записали его в скрипт в своем контейнере) .