Простой вопрос, я хочу запустить команду docker в фоновом режиме.
(На самом деле, выполнение любой команды с параметрами командной строки в Powershell - это мой реальный вопрос, но docker
- простой конкретный вопрос)
У меня есть команда
docker run -ti --rm -e DISPLAY=$DISPLAY firefox
который отлично работает под Powershell, но блокируется.
Я хочу запустить эквивалентный метод выполнения «&», как в * nix:
docker run -ti --rm -e DISPLAY=$DISPLAY firefox &
я пробовал
- Запустить exe в фоновом режиме
- Эквивалент амперсанда bash в Powershell (&) для разветвления / запуска фоновых процессов
но у меня ничего не работает:
> ping google.com &
At line:1 char:17
+ ping google.com &
+ ~
The ampersand (&) character is not allowed.
> Start-Process "C:\Program Files\Docker\Docker\resources\bin\docker.exe" run -ti --rm -e DISPLAY=$DISPLAY firefox
Start-Process : Parameter cannot be processed because the parameter name 'e' is ambiguous. Possible
matches include: -ErrorAction -ErrorVariable.
At line:1 char:86
+ ... Files\Docker\Docker\resources\bin\docker.exe" run -ti --rm -e DISPLAY ...
+ ~~
+ CategoryInfo : InvalidArgument: (:) [Start-Process], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameter,Microsoft.PowerShell.Commands.StartProcessCommand
Пытался обернуть всю команду в Start-Process { ... }
, тоже не работает.
[ОБНОВЛЕНИЕ / Сводка]
Принятые ответы работают (после того, как я удалил «-ti
» из командной строки), как сказал @nischay goyal, «пожалуйста, не используйте -it, поскольку он открывает терминал и блокирует его».. Я получил ошибку:
the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'
+ CategoryInfo : NotSpecified: (the input devic...d with 'winpty':String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
+ PSComputerName : localhost
Таким образом,
Start-Job
может не подходить в качестве универсального способа выполнения "&
", например, если я хочу начатьbash &
таким образом.Однако
Start-Process
работает после передачи всех остальныхdocker
параметров командной строки параметру-ArgumentList
в виде одной строки.И, конечно же, как говорят все люди из лагеря docker / Linux, используйте
-d
.
В общем, есть много способов решить проблему. Выберите тот, который вам подходит.