無法使用具有公共IP地址的EC2 Ubuntu Linux 12.04實例啓動bottle.py服務器。程序(hw.py)來自瓶子教程即。EC2,bottle.py連接
from bottle import route, run
@route('/hello')
def hello():
return 'hello world'
run(host='xxx.xxx.xxx.xxx', port=80)
運行方式:
> python hw.py
or
> sudo python hw.py
生成錯誤:
Traceback (most recent call last):
File "hw.py", line 7, in <module>
run(host='xxx.xxx.xxx.xxx', port=80)
File "/usr/local/lib/python2.7/dist-packages/bottle.py", line 2700, in run
server.run(app)
File "/usr/local/lib/python2.7/dist-packages/bottle.py", line 2382, in run
srv = make_server(self.host, self.port, handler, **self.options)
File "/usr/lib/python2.7/wsgiref/simple_server.py", line 144, in make_server
server = server_class((host, port), handler_class)
File "/usr/lib/python2.7/SocketServer.py", line 408, in __init__
self.server_bind()
File "/usr/lib/python2.7/wsgiref/simple_server.py", line 48, in server_bind
HTTPServer.server_bind(self)
File "/usr/lib/python2.7/BaseHTTPServer.py", line 108, in server_bind
SocketServer.TCPServer.server_bind(self)
File "/usr/lib/python2.7/SocketServer.py", line 419, in server_bind
self.socket.bind(self.server_address)
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 99] Cannot assign requested address
的EC2公共IP地址沒有被連接到任何其它過程。端口80未連接到其他進程。
> sudo netstat -lp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 *:ssh *:* LISTEN 629/sshd
tcp6 0 0 [::]:ssh [::]:* LISTEN 629/sshd
udp 0 0 *:bootpc *:* 463/dhclient3
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 7190 667/dbus-daemon /var/run/dbus/system_bus_socket
unix 2 [ ACC ] STREAM LISTENING 5888 1/init @/com/ubuntu/upstart
unix 2 [ ACC ] STREAM LISTENING 7312 741/acpid /var/run/acpid.socket
unix 2 [ ACC ] SEQPACKET LISTENING 26855 21843/udevd /run/udev/control
更改爲:運行(主機= 'xxx.xxx.xxx.xxx',端口= 8080)
該錯誤是socket.error:[錯誤99]無法分配請求的地址。
更改爲:運行(主機= '0.0.0.0',端口= 8080)
...結合所述服務器到所有IP /接口。將EC2公共IP地址輸入到帶有或不帶有8080的瀏覽器中將顯示「此頁面不可用」。
理想情況下,第一個選項,即。運行(host ='xxx.xxx.xxx.xxx',port = 80)應該像其他Web服務器的啓動一樣工作。任何人有想法如何解決這個問題?
編輯:添加最後一組從strace的-f行:
write(2, " File \"/usr/lib/python2.7/Socke"..., 70 File "/usr/lib/python2.7/SocketServer.py", line 419, in server_bind
) = 70
open("/usr/lib/python2.7/SocketServer.py", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=23321, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f434cbfe000
read(4, "\"\"\"Generic socket server classes"..., 4096) = 4096
read(4, "service) is to maintain an\nexpli"..., 4096) = 4096
read(4, "set()\n\n def shutdown(self):\n "..., 4096) = 4096
read(4, "n't use serve_forever()\n - fi"..., 4096) = 4096
write(2, " ", 4 ) = 4
write(2, "self.socket.bind(self.server_add"..., 38self.socket.bind(self.server_address)
) = 38
close(4) = 0
munmap(0x7f434cbfe000, 4096) = 0
write(2, " File \"/usr/lib/python2.7/socke"..., 57 File "/usr/lib/python2.7/socket.py", line 224, in meth
) = 57
open("/usr/lib/python2.7/socket.py", O_RDONLY) = 4
fstat(4, {st_mode=S_IFREG|0644, st_size=20485, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f434cbfe000
read(4, "# Wrapper module for _socket, pr"..., 4096) = 4096
read(4, "oo long.\"\n errorTab[10064] = "..., 4096) = 4096
write(2, " ", 4 ) = 4
write(2, "return getattr(self._sock,name)("..., 39return getattr(self._sock,name)(*args)
) = 39
close(4) = 0
munmap(0x7f434cbfe000, 4096) = 0
write(2, "socket", 6socket) = 6
write(2, ".", 1.) = 1
write(2, "error", 5error) = 5
write(2, ": ", 2:) = 2
write(2, "[Errno 99] Cannot assign request"..., 42[Errno 99] Cannot assign requested address) = 42
write(2, "\n", 1
) = 1
rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x7f434c7d1cb0}, {0x41d920, [], SA_RESTORER, 0x7f434c7d1cb0}, 8) = 0
close(3) = 0
exit_group(1) = ?
你有沒有嘗試過以root身份運行Python? – Blender
> sudo python hw.py給出了無法分配請求的地址錯誤。 –
使用'strace -f'運行,在出錯前粘貼相關位。在錯誤發生之前, – soulseekah