Docker python websocket错误:错误:多个异常:[Errno 111]C连接调用失败(';127.0.0.1';3737379),[Errno 99]
在Raspberry Pi上运行python脚本(称为localserver.py)效果很好,但是在docker容器中运行相同的代码会导致下一个问题:Docker python websocket错误:错误:多个异常:[Errno 111]C连接调用失败(';127.0.0.1';3737379),[Errno 99],python,docker,websocket,Python,Docker,Websocket,在Raspberry Pi上运行python脚本(称为localserver.py)效果很好,但是在docker容器中运行相同的代码会导致下一个问题: smartmeter_1 | Traceback (most recent call last): smartmeter_1 | File "/usr/lib/python3.5/asyncio/base_eve smartmeter_1 | yield from self.sock_connect(sock, addr sma
smartmeter_1 | Traceback (most recent call last):
smartmeter_1 | File "/usr/lib/python3.5/asyncio/base_eve
smartmeter_1 | yield from self.sock_connect(sock, addr
smartmeter_1 | File "/usr/lib/python3.5/asyncio/selector
smartmeter_1 | return (yield from fut)
smartmeter_1 | File "/usr/lib/python3.5/asyncio/futures.
smartmeter_1 | yield self # This tells Task to wait f
smartmeter_1 | File "/usr/lib/python3.5/asyncio/tasks.py
smartmeter_1 | future.result()
smartmeter_1 | File "/usr/lib/python3.5/asyncio/futures.
smartmeter_1 | raise self._exception
smartmeter_1 | File "/usr/lib/python3.5/asyncio/selector
smartmeter_1 | raise OSError(err, 'Connect call failed
smartmeter_1 | ConnectionRefusedError: [Errno 111] Connect
smartmeter_1 |
smartmeter_1 | During handling of the above exception, ano
smartmeter_1 |
smartmeter_1 | Traceback (most recent call last):
smartmeter_1 | File "localserver.py", line 223, in <modu
smartmeter_1 | asyncio.get_event_loop().run_until_comp
smartmeter_1 | File "/usr/lib/python3.5/asyncio/base_eve
smartmeter_1 | return future.result()
smartmeter_1 | File "/usr/lib/python3.5/asyncio/futures.
smartmeter_1 | raise self._exception
smartmeter_1 | File "/usr/lib/python3.5/asyncio/tasks.py
smartmeter_1 | result = coro.throw(exc)
smartmeter_1 | File "localserver.py", line 50, in procRe
smartmeter_1 | 'ws://localhost:37379') as websocket:
smartmeter_1 | File "/usr/local/lib/python3.5/dist-packa
smartmeter_1 | return await self
smartmeter_1 | File "/usr/local/lib/python3.5/dist-packa
smartmeter_1 | transport, protocol = await self._creat
smartmeter_1 | File "/usr/lib/python3.5/asyncio/base_eve
smartmeter_1 | ', '.join(str(exc) for exc in exception
smartmeter_1 | OSError: Multiple exceptions: [Errno 111] C Connect call failed ('127.0.0.1', 37379), [Errno 99] Cannot assign requested address
你能提供一个完整的例子来说明这个问题吗?乍一看,您可能在Docker上下文中误用了
localhost
,但这很难说;一个容器在四个不同的端口上侦听是有点奇怪的,正如Python源代码中提到的NODE_ENV
,以及您显示的命令/入口点/卷的组合。感谢您的回复。客户端试图在websocket服务器代码运行之前获取数据。因此,我们增加了一点延迟,现在一切都很好。你能提供一个完整的例子来说明这个问题吗?乍一看,您可能在Docker上下文中误用了localhost
,但这很难说;一个容器在四个不同的端口上侦听是有点奇怪的,正如Python源代码中提到的NODE_ENV
,以及您显示的命令/入口点/卷的组合。感谢您的回复。客户端试图在websocket服务器代码运行之前获取数据。因此,我们几乎没有延迟,现在一切都很顺利。
localserver.py -------->
async def procReadings():
#await asyncio.sleep(30)
async with websockets.connect(
'ws://localhost:37379') as websocket:
.....
.....
while True:
print(secondsDelay)
#time.sleep(secondsDelay)
time.sleep(5)
asyncio.get_event_loop().run_until_complete(procReadings())
docker-compose.yml ------------------------>
version: '3.3'
services:
# Smartmeter
smartmeter:
build: ./docker
ports:
- 3000:3000
- 8501:8501
- 8546:8546
- 37379:37379
command: sleep infinity
environment:
- NODE_ENV=development
- CHOKIDAR_USEPOLLING=true
- METERID=1
entrypoint: /etc/demo/entrypoint.sh
volumes:
- ./:/etc/demo