Недавно я столкнулся с одним нетривиальным (для меня) случаем. Может быть, вы знаете какой-нибудь способ ее решения.
У меня есть сценарий оболочки, который запускает команду Docker для запуска контейнера Ubuntu, который заканчивается запуском гостевого Bash, который запускает некоторые системные службы, включая веб-сервер. После инициализации гостевого Bash я хочу открыть веб-браузер на моей главной машине. В настоящее время это выглядит так:
docker run -it -p $PORT:80 -v $ROOT:/usr/share/nginx $PROJECT python -m webbrowser http://localhost:$PORT
Но это явно не работает, поскольку скрипт ждет, пока docker
выйдет, чтобы запустить python
. Их замена также не будет работать, поскольку веб-сайт будет загружен до запуска гостевого Bash (и веб-сервера). В то же время мне нужно запустить Docker с помощью -it
, поэтому docker ... & python ...
тоже не будет работать.
Есть ли способ заставить все работать?
Вы можете запустить веб-браузер после начальной задержки в фоновом режиме:
(sleep 2 && python -m webbrowser http://localhost:$PORT) & docker run -it -p $PORT:80 -v $ROOT:/usr/share/nginx $PROJECT
Я делаю это для обертки докеров для захвата, чтобы просмотреть README, обслуживаемый контейнером в хосте, и он отлично работает для меня. Это зависит от того, как долго ваш контейнер должен запускаться.