コンテナの中からポートにアクセスすることができる。
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
$
以上。