Краткое введение в вариант использования:
Я использую dockerконтейнер для запуска моих goтестов с помощью go test ./.... Это может быть легко достигнуто с помощью docker exec <container> /bin/sh -c "go test ./...". К сожалению, go test ./...работает во всех подкаталогах, и я хотел бы исключить один (каталог поставщика).
Рекомендуемое решение для этого заключается в использовании следующей команды: go test $(go list ./... | grep -v '<excluded>'как-то это оставляет меня со следующим результатом:
docker run golang:1.6.2-alpine /bin/sh -c "go test " (Я проверил это как на run, так и на exec, но они, вероятно, используют одно и то же ядро).
Когда я ssh в контейнер с помощью docker exec -it <container_id> /bin/shи запускаю ту же команду, это работает как шарм.
Кажется, что выполнение команд оболочки через докер exec / run не поддерживает команды, вложенные в $()?
vendorнапример.
$(...)ваша оболочка была развернута внутри двойных кавычек, прежде чем она была запущена внутри контейнера докера. Таким образом, проблема может исходить от вашего текущего содержимого каталога. Работал docker exec container /bin/sh -c 'go test $(go list ./... | grep -v "<excluded>")'?
$(go list ./... | grep -v '<excluded>'что<excluded>это?