23
7

More than 3 years have passed since last update.

【Docker】コンテナ内からホストにアクセスする方法。http://host.docker.internal:

Posted at

コンテナの中からポートにアクセスすることができる。
WEBページの内容を表示する$curl URLコマンドで確認する。

接続方法には、(1)コンテナのポートを指定する方法と、(2)ホストのポートを指定する方法がある。

アクセス手順

1) 起動中のコンテナ内に入る

docker exec -it [コンテナ名] bash

これでコンテナ内のbashにアクセスできる。コンテナによってはbashではなくshの場合もある。

2) curlでhttpをリクエストする

▼コンテナのポートに直接アクセスする場合
curl http://[コンテナ名]:[コンテナ側のポート]

▼ホスト側のポートにアクセスする場合
curl http://host.docker.internal:[ホスト側のポート]

実例

起動中のコンテナを確認
$ docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS              PORTS                                            NAMES
d4ae7996f53c        django_web                  "python manage.py ru…"   10 hours ago        Up 10 hours         0.0.0.0:8100->8000/tcp                           django_web_1

0.0.0.0:8100->8000/tcpこれが重要!

「ホスト側のポート番号 -> コンテナ内のポート番号」

「0.0.0.0」はlocalhostではなく、全てのポートからのアクセスを表す。

なので、「0.0.0.0:8100 -> 8000」は全ての8100へのアクセスをコンテナ内の8000番ポートにマッピングするという意味になる。


コンテナ内に入る
$ docker exec -it django_web_1 bash
root@d4ae7996f53c:/code#

コンテナ名「django_web_1」のbashを起動。


コンテナのポートに直接アクセスする場合

root@d4ae7996f53c:/code# curl http://django_web_1:8000

http://コンテナ名:コンテナ側のポート番号、これでコンテナ指定したポートにアクセスできる。



間違えてホスト側のポートを指定するとエラーになる。

エラー例
root@d4ae7996f53c:/code# curl http://django_web_1:8100
curl: (7) Failed to connect to django_web_1 port 8100: Connection refused


ホスト側のポートにアクセスする場合

ホスト側のポートにアクセスする場合はhost.docker.internal:ホスト側のポート番号を使う。

root@d4ae7996f53c:/code# curl http://host.docker.internal:8100

host.docker.internalはdocker側で用意してあるDNS。ホスト側のlocalhostに該当する。

これは、コンテナの外側から
curl http://localhost:8100を実行するのと同じ。


コンテナから出る
root@d4ae7996f53c:/code# exit
$

以上。

23
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
7