Docker python websocket错误:错误:多个异常:[Errno 111]C连接调用失败(';127.0.0.1';3737379),[Errno 99]

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

在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
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