TL;DR
Dockerコンテナで起動したアプリケーションに対してブラウザから以下のアドレスでアクセスする。
http://127.0.0.1:8000
Issue
以下のように ERR_EMPTY_RESPONSE が返却されてしまい、
Dockerコンテナで起動しているアプリケーションにアクセスできない。
ホストマシンからcurl
を送信しても以下の通り、うまく繋がらない。
taichikanaya@kanayatBookpuro attakait_hp % curl http://127.0.0.1:8000
curl: (52) Empty reply from server
taichikanaya@kanayatBookpuro attakait_hp %
Cause
Dockerコンテナ内でのアプリケーションを127.0.0.1
で起動しているから。
(なので、Dockerコンテナ内からアプリケーションへのアクセスは可能だが、
ホストマシンからDockerコンテナ内へのアクセスはできないといった現象が発生する)
Solution
Dockerコンテナ内でのアプリケーションを 0.0.0.0
で起動する。
(127.0.0.1
だとDockerコンテナ内からのみアクセス可能になってしまうので、
ホストマシンからアクセスできるように 0.0.0.0
へ変更する必要がある)
gunicornを起動する場合は以下のようにしてあげることでアクセスできるようになりました。
gunicorn attakait_hp.wsgi --bind 0.0.0.0:8000 --log-file -
以下は私が使用していた簡単なDockerファイル群です。
Dockerfile
FROM python:3.7
ADD . /var/www/html
WORKDIR /var/www/html
RUN pip install -r ./requirements.txt
docker-compose.yml
version: '3'
services:
attakait_app:
build:
context: .
dockerfile: ./Dockerfile
image: python:3.7
volumes:
- '.:/var/www/html'
container_name: hp
tty: true
working_dir: '/var/www/html'
ports:
- 8000:8000
command:
gunicorn attakait_hp.wsgi --bind 0.0.0.0:8000 --log-file -