Dockerコンテナを起動し、ホストシステムでWebブラウザを開きます。

Dockerコンテナを起動し、ホストシステムでWebブラウザを開きます。

私は最近、珍しい(私に)ケースに触れました。たぶんあなたはそれを修正する方法を知っているかもしれません。

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サーバー)が起動する前にWebサイトがロードされるため、交換は機能しません。同時にを使用してDockerを実行する必要があるため、うまく-it動作docker ... & python ...しません。

仕事を動かす方法はありますか?

答え1

バックグラウンドで初期遅延後にWebブラウザを実行できます。

(sleep 2 && python -m webbrowser http://localhost:$PORT) &
docker run -it -p $PORT:80 -v $ROOT:/usr/share/nginx $PROJECT

私はこれのためにこれを行いますグリップ用ドッカーラッパーホストのコンテナが提供する追加情報を見ると、うまくいきました。コンテナの起動に必要な時間によって異なります。

答え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

カール30秒間1秒ごとに接続しようとした後、あきらめてください。これが発生すると、ブラウザはまったく起動しません。ブラウザが無条件に実行されるようにするには、を&&置き換えます;

関連情報