コンテナからホスト側のサーバーにアクセスする
Docker コンテナの中から、ホスト側で動作しているサービス(Web サーバーなど)にアクセスするには、IP アドレスの代わりに特殊な DNS 名 host.docker.internal
を使用します(localhost
だとコンテナ自身を参照してしまうのでうまくいきません)。
$ curl http://host.docker.internal:8000/
接続テスト
テストとして、ホスト上で Web サーバーを起動してコンテナからアクセスしてみます。 まず、何でもいいのでホスト側で Web サーバーを起動します。
$ docker container run --rm -p 8000:80 --name webserver nginx:alpine
$ python -m http.server 8000
Serving HTTP on :: port 8000 (http://[::]:8000/) ...
次に、コンテナ側からこの Web サーバーに curl
でアクセスできるか確認します。
ここでは、軽量のコンテナとして Alpine Linux を使っています。
$ docker container run --rm -it alpine ash
/ # apk add curl
/ # curl http://host.docker.internal:8000/
<!DOCTYPE html>
<html>
...(省略)...