首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有Docker连接的Python Aiosmtpd服务器拒绝

带有Docker连接的Python Aiosmtpd服务器拒绝
EN

Stack Overflow用户
提问于 2021-06-05 23:18:13
回答 1查看 217关注 0票数 0

我试图开发一个测试电子邮件服务器,应该运行在一个码头容器。docker容器的运行方式是--network=host -P;但是对于单元测试,我想使用--network=none。

我故意指定应该使用端口0(让操作系统选择可用的端口)。然后,我有一个函数来获取实际使用的端口。服务器代码是

代码语言:javascript
复制
#! /usr/bin/env python3

import asyncio #pylint: disable=unused-import
from aiosmtpd.controller import Controller

class DemoEmailHandler:
    async def handle_DATA(self, server, session, envelope):
        message = {
            'peer' : session.peer,
            'mailfrom' : envelope.mail_from,
            'to': envelope.rcpt_tos,
            'data' : envelope.content}
        print(message)
        return '250 Message accepted for delivery'


class DemoEmailServer:
    def __init__(self):
        self._handler = DemoEmailHandler()
        self._server = Controller(
            handler=self._handler,
            hostname="0.0.0.0",
            port=0
        )
        self._server.start()
        self._port = self._server.server.sockets[0].getsockname()[1]

    def stop(self):
        """Tell the server to stop"""
        self._server.stop()

    def getPort(self) -> int:
        """Return the port the SMTP (email) server is actually on"""
        return self._port

SERVER = DemoEmailServer()
print(SERVER.getPort())
SERVER.stop()

我一直被拒绝了:

代码语言:javascript
复制
Traceback (most recent call last):
  File "./demo_email_server.py", line 36, in <module>
    SERVER = DemoEmailServer()
  File "./demo_email_server.py", line 25, in __init__
    self._server.start()
  File "/usr/local/lib/python3.8/dist-packages/aiosmtpd-1.4.2-py3.8.egg/aiosmtpd/controller.py", line 223, in start
    self._trigger_server()
  File "/usr/local/lib/python3.8/dist-packages/aiosmtpd-1.4.2-py3.8.egg/aiosmtpd/controller.py", line 313, in _trigger_server
    s = stk.enter_context(create_connection((hostname, self.port), 1.0))
  File "/usr/lib/python3.8/socket.py", line 808, in create_connection
    raise err
  File "/usr/lib/python3.8/socket.py", line 796, in create_connection
    sock.connect(sa)
ConnectionRefusedError: [Errno 111] Connection refused

如果我使用s.bind(‘0.0.0.0’,0)创建一个没有拒绝连接的简单服务器套接字。

(我的主机和容器都是Ubuntu20.04,python 3.8.5,容器从源代码中安装了aiosmtpd 1.4.2 )。

有人能帮忙吗?

EN

回答 1

Stack Overflow用户

发布于 2022-01-08 18:33:39

我认为您应该选择系统上可用的另一个端口。例如,尝试这种选择可用端口的方法:

导入套接字sock = socket.socket() sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) sock.bind(“”,0)主机,端口= sock.getsockname()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67854624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档