Проблема с запуском докера с параметром команды с использованием сценариев NPM

У меня есть репозиторий с некоторыми удобными сценариями NPM для запуска некоторых основных команд докера:

  "scripts": {
    "build": "docker build -t myreadyapi --build-arg LICENSE_SERVER=1.1.1.1 .",
    "prestart": "npm run build",
    "start": "docker run -p 8089:8088 myreadyapi",
    "debug": "docker exec -it $(docker ps -a -q --filter ancestor=myreadyapi) /bin/bash",
    "stop": "docker rm $(docker stop $(docker ps -a -q --filter ancestor=myreadyapi))"
  }

npm run build и npm run start работают, а npm run debug и npm run stop вызывают ошибку:

Ошибка: нет такого контейнера: $(docker

Примечание: запустите это из консоли Windows 10 PowerShell.

Ошибка возникает для любого сценария докера, который имеет параметр команды (например, docker ... $(docker ...)).

Кто-нибудь сталкивался с этим раньше и знает, как это исправить?

Ваше здоровье.


person Ryan.Bartsch    schedule 28.03.2019    source источник


Ответы (2)


Может случиться так, что у вас есть несколько остановленных контейнеров, соответствующих $(docker ps -a -q --filter ancestor=myreadyapi).
Или контейнер с соответствующим filter не найден.
Одним из решений может быть создание случайного имени контейнера и использование этого имени в дальнейших командах или установка ancestor сгенерированного системой значения.

person Akash Sharma    schedule 28.03.2019
comment
Если я запускаю команду прямо в консоли, она работает... просто когда я запускаю ее через NPM - person Ryan.Bartsch; 28.03.2019
comment
Итак, как же начать работать. После запуска контейнера докеров, когда он перемещается в debug, происходит start выход. Если это так, попробуйте изменить start на docker run -d -p 8089:8088 myreadyapi, чтобы запустить контейнер как демон. - person Akash Sharma; 28.03.2019
comment
Я не думаю, что это имеет какое-либо отношение к командам докера — все они отлично работают при запуске непосредственно из командной строки. Проблема заключается в попытке запустить команды Docker (особенно те, которые имеют параметры команды) через скрипт NPM, например. 'npm запустить отладку'. - person Ryan.Bartsch; 29.03.2019
comment
Все они работают через командную строку, но только строят и запускают работу через NPM. Что общего в сценариях остановки и отладки, из-за чего они не работают? Параметры команды - это одно... это также выделено в сообщении об ошибке - Ошибка: нет такого контейнера: $(docker - person Ryan.Bartsch; 29.03.2019

Я смог заставить это работать, добавив «@powershell» перед командой. Это предполагает, что Powershell находится на вашем пути

EG

"docker:stop":"@powershell docker rm $(docker stop $(docker ps -a -q --filter ancestor=myreadyapi))"

Ссылка на этот ответ

person Jeff    schedule 09.08.2019