bottleのHello Worldでハマった

pythonの軽量Webフレームワークbottleを使ってみようと思い、とりあえず以下のコードを書いた。

from bottle import route, run

@route('/hello')
def	hello():
	return "<h1>Hello World</h1>"
	
run(host = 'localhost', port = 9090, debug = True)

が、connection refuedとなりアクセス出来ない。

自分の環境はWindows7+Vagrant(Virtualbox)+VM上のDockerで、Docker上でPython3を動かしている。

アクセスはWindows上のChromeから。

ファイルパーミッションやら所有権やら色々悩んだのだが、正解はこう。

from bottle import route, run

@route('/hello')
def	hello():
	return "<h1>Hello World</h1>"
	
run(host = '0.0.0.0', port = 9090, debug = True)

hostをlocalhostとすると文字通りlocalhostでしかつながらない。つまり上記の環境ならpythonを動かしてる環境上からでしかつながらない。

Windows7VM上からアクセスしたいならhostを0.0.0.0と指定する。

0.0.0.0はすべてのネットワークインターフェースからアクセスを受け付ける。

API Reference — Bottle 0.13-dev documentation

runのhostに指定するのはリクエストを受け付けるネットワークインターフェースのIPアドレスということらしい。

参考元↓stackoverflow.com