Короткий вступ до випадку використання:
Я використовую 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, але вони, ймовірно, використовують одне ядро).
Коли я впадаю в контейнер, використовуючи docker exec -it <container_id> /bin/shта запускаючи абсолютно ту саму команду, вона працює як шарм.
Здається, що виконання команд оболонки через docker exec / run не підтримує жодних вкладених команд $()?
vendorНаприклад , це каталог .
$(...)була розширена вашою оболонкою всередині подвійних лапок, перш ніж її запустити всередині контейнера докер. Отже, проблема може виникнути з вашого поточного вмісту каталогу. Чи docker exec container /bin/sh -c 'go test $(go list ./... | grep -v "<excluded>")'працювали?
$(go list ./... | grep -v '<excluded>', що<excluded>є?