先に結論
以下の設定を利用すればアクセス可能
参考:https://docs.docker.com/docker-for-windows/networking/
host.docker.internal
アクセス例:
http://host.docker.internal:5000/webapi/
事の発端
現在、画像ベースのレコメンドシステムを作成しており、以下のような構成で動いています。
Webアプリ:
Laravelで作成、Dockerコンテナで動作
リコメンドエンジン:
Python + Flaskで作成、ホストマシン(Windows上) で動作
この時、Dockerコンテナで動いているLaravelアプリケーションから、ホストマシンで動ているPythonへアクセスする必要が出てきました。
リコメンドエンジンはPython + Flaskで動いており、WebAPIとして動作しています。
Laravelから「 file_get_contents 」関数を利用しホストのWebAPIへアクセス、レスポンスを取得する方法を用いることにしました。
ホストにアクセスする
いろいろ調べたところ、冒頭で紹介した「host.docker.internal」が利用できることが分かりました。
試しにDockerコンテナ内からpingを実行してみると・・・

きちんとpingが通りましたね
プログラム内では、以下のような記述でアクセス可能でした
public function recommend(RecommendRequest $request) { $imagefile = $request->file('img'); $temp_path = $imagefile->store('public/upload'); $filenameArr = explode('/', $temp_path); // 外部APIを呼び出し、リコメンド結果を受け取る $html = file_get_contents('http://host.docker.internal:5000/imgPath/' . $filenameArr[2]); }
以上でDockerコンテナからホストへアクセスする方法の紹介は終了です。
Dockerは便利でよく利用はしていますが、まだまだ知らないことばかりです。