我最近遇到了一个(对我来说)不平凡的案例。也许你知道有什么办法可以解决它。
我有一个 shell 脚本,它运行 Docker 命令来启动 Ubuntu 容器,最终运行来宾 Bash,启动一些系统服务,包括 Web 服务器。来宾 Bash 初始化后,我想在主机上打开 Web 浏览器。目前看起来是这样的:
docker run -it -p $PORT:80 -v $ROOT:/usr/share/nginx $PROJECT
python -m webbrowser http://localhost:$PORT
但这显然效果不佳,因为脚本会等到docker
退出才开始python
。交换它们不会起作用,因为网站将在来宾 Bash(和 Web 服务器)启动之前加载。同时我需要使用 来运行 Docker -it
,所以docker ... & python ...
效果不太好。
有什么办法可以让事情顺利进行吗?
答案1
您可以在后台初始延迟后运行网络浏览器:
(sleep 2 && python -m webbrowser http://localhost:$PORT) &
docker run -it -p $PORT:80 -v $ROOT:/usr/share/nginx $PROJECT
我这样做是为了用于握持的 docker 包装器查看主机中容器提供的自述文件,它对我来说工作得很好。这取决于您的容器需要启动多长时间。
答案2
这是一个使用的版本卷曲当容器中的服务器启动时启动浏览器:
(curl --silent --retry 30 --retry-delay 1 --retry-connrefused \
http://localhost:$PORT && \
python -m webbrowser http://localhost:$PORT) &
docker run -it -p $PORT:80 -v $ROOT:/usr/share/nginx $PROJECT
卷曲尝试每秒连接三十秒,然后放弃。发生这种情况时,浏览器根本不会启动。如果您希望浏览器无条件启动,请将 替换&&
为;
.