もしかしたら「当たり前だろヴォケが」的なお話かもですが、個人的にハマったので戒めとして残しておきます。。
何故や
docker-composeのサービス名ってそのまま ホスト名
としてコンテナ間で参照できたりするのですが、ホスト名には アンダースコア
を含めちゃイカンのです。
実際にはじかれるケースに遭遇
DjangoをDockerで動かして、別のコンテナからアクセスすると Invalid HTTP_HOST
つって怒られました。
version: '2'
services:
suteki_na_web:
image: suteki_na_django
volumes:
- ./source:/source
working_dir: /source
command: ./manage.py runserver 0.0.0.0:8000
ports:
- 8000
hoge_container:
image: alpine:3.6
command: wget http://suteki_na_web:8000
調べると ALLOWED_HOST
書けよって言ってる人がたくさんいたんですけど、書いてもさっぱり動かなかったのであれーっと思ってソース読んでみたら、アンダースコア入りのホスト名は弾かれてました。。
# https://github.com/django/django/blob/master/django/http/request.py#L24
host_validation_re = re.compile(r"^([a-z0-9.-]+|\[[a-f0-9]*:[a-f0-9\.:]+\])(:\d+)?$")
ドメイン名としてはOKらしいが...
参考資料に書いてありますが、 ホスト名はNG
で ドメイン名はOK
とのこと。
ただDjangoの実装的には弾かれてるので アンダースコアは使わない
に統一した方が、余計な事故に合わずに済みそうです。