起こった問題
ここを参考に環境構築していたら詰まったので、補足の記事を作りました。
私の環境
- windows10 Home
- Vagrant + Ubuntu
- Docker CE
- python3
- Django 2.2
原因と解決方法
最後の「開発用サーバ起動」までは、こちらの記事のとおりに進めることができました。
最後の最後、開発用サーバ起動の手順
docker exec test python3 manage.py runserver 0.0.0.0:8000
このあとでブラウザからlocalhost:8000
にアクセスすると失敗します。
原因1:Vagrantfileのguestポートとhostポートの設定がおかしい
config.vm.network "forwarded_port", guest: 8000, host: 12345
host側(Windows)で12345のポートを使って、guest側(ubunts)の8000につなぐ、ってことだと思います。なので、ブラウザからアクセスするときの ポート指定は12345 にする必要があります。
原因2:コンテナ起動時に指定するポートと、WEBサーバ起動時に指定するポートが一致してない
元記事ではこのようにしてコンテナを起動しています。
$ docker run -itd -p 127.0.0.1:8000:8000 -v /path/to/src:/code --name test django
このときの-p 127.0.0.1:8000:8000
は、ubuntu側のポート8000とコンテナ側のポート8000をつなぐよ、ってことだと思います。
さきほどの原因1のところで、Vagrantfile内でguest側(Ubunts)は8000を使うよと設定したので、コンテナ起動時の指定にもUbuntuは8000を使うよとする必要があります。
また、元記事ではこのようにして、Django付属のWEBサーバを起動しています。
$ docker exec test python3 manage.py runserver 0.0.0.0:8000
上で、コンテナ起動時にコンテナ側は8000を使うよと指定したので、コンテナ側でDjangoのWEBサーバが使うのは8000である必要があります。
図にするとたぶんこういう感じです。

アクセスを確認
http://localhost:12345
以上です。ぐったり。