Krótkie wprowadzenie do przypadku użycia:
Używam dockerkontenera do uruchamiania gotestów przy użyciu go test ./.... Można to łatwo osiągnąć za pomocą docker exec <container> /bin/sh -c "go test ./...". Niestety go test ./...działa we wszystkich podkatalogach i chciałbym wykluczyć jeden (katalog dostawcy).
Zalecanym rozwiązaniem jest użycie następującego polecenia: go test $(go list ./... | grep -v '<excluded>'w jakiś sposób pozostawia mi to następujący wynik:
docker run golang:1.6.2-alpine /bin/sh -c "go test " (Testowałem to zarówno w trybie run, jak i exec, ale prawdopodobnie używają tego samego rdzenia).
Kiedy ssh do kontenera używam docker exec -it <container_id> /bin/shi uruchamiam dokładnie to samo polecenie, działa to jak urok.
Wydaje się, że wykonywanie poleceń powłoki przez exec / run dokera nie obsługuje żadnych zagnieżdżonych poleceń $()?
vendor.
$(...)został rozszerzony przez twoją powłokę wewnątrz podwójnych cudzysłowów, zanim została uruchomiona w kontenerze dokera. Problem może pochodzić z bieżącej zawartości katalogu. Czy docker exec container /bin/sh -c 'go test $(go list ./... | grep -v "<excluded>")'działa?
$(go list ./... | grep -v '<excluded>'czym<excluded>jest?