У вас есть целевая переменная с побочным эффектом, и вы делаете неверное предположение, что переменная не будет расширена, пока не будет выполнено правило. Я бы переключился на использование переменной bash и объединение рецепта для запуска в одной оболочке следующим образом:
build-api: build-image
CONTAINER_ID=$$(docker run -d $(IMAGE)); \
docker wait $${CONTAINER_ID}; \
docker cp $${CONTAINER_ID}:/usr/src/vendor ./; \
docker rm -f $${CONTAINER_ID};
Другим вариантом является создание цели, которая создает идентификатор контейнера и сохраняет его в файле. Сделайте build-api
зависимым от этой новой цели, а затем в build-api
пусть каждая строка рецепта прочитает значение из файла.