Просто удалите из Dockerfile все, что не имеет ничего общего с вашим сценарием, и начните с чего-то простого, например,
FROM python:3
ADD my_script.py /
CMD [ "python", "./my_script.py" ]
. Вам не нужно, чтобы Docker составлял для контейнерирования одного сценария Python.
Пример взят из этого простого учебника о контейнеризации приложений Python: https://runnable.com/docker/python/dockerize-your-python-application
Вы можете легко перезапишите команду, указанную в файле Docker (через CMD
), при запуске контейнера из образа. Просто добавьте нужную команду к вашей docker run
команде, например:
docker run IMAGE /path/to/script.py
Поскольку MSN использует SSL-соединения, необходимо установить pyOpenSSL для его использования. Кажется, что вы, вероятно, нет. Однако Twisted не очень хороший способ сообщить об этой отсутствующей зависимости. Я рекомендую подать заявку в трекер Twisted для улучшения этой отчетности.
Это исключение, которое вы получаете, когда вы пытаетесь вызвать объект None. Проверь это :
>>> a = str
>>> a() # it's ok, a string is a callable class
''
>>> a = None
>>> a() # it fails, None a special Singleton not meant to be called
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
a()
TypeError: 'NoneType' object is not callable
Вы не можете угадать это так, поэтому вам нужно сделать некоторую отладку.
Очевидно, что последняя строка (refactor.connectSSL ...) содержит три вызова объекта, и один из объектов - None.
Первое, что вы можете сделать, если вы не являетесь отладчиком, если взять каждый элемент строки и добавить непосредственно перед ним:
assert object1 is None
assert object2 is None
Тогда у вас будет источник вашего исключения. После этого проверьте, почему для этого объекта установлено значение Нет. Вам, вероятно, придется проверить документ, чтобы увидеть, в каком случае какой-то метод, который мог его инициализировать, возвращает None.
Пусть сила ...
если вы не в отладчиках, если взять каждый элемент строки и добавить непосредственно перед ним:assert object1 is None
assert object2 is None
Тогда у вас будет источник вашего исключения. После этого проверьте, почему для этого объекта установлено значение Нет. Вам, вероятно, придется проверить документ, чтобы увидеть, в каком случае какой-то метод, который мог его инициализировать, возвращает None.
Пусть сила ...
если вы не в отладчиках, если взять каждый элемент строки и добавить непосредственно перед ним:assert object1 is None
assert object2 is None
Тогда у вас будет источник вашего исключения. После этого проверьте, почему для этого объекта установлено значение Нет. Вам, вероятно, придется проверить документ, чтобы увидеть, в каком случае какой-то метод, который мог его инициализировать, возвращает None.
Пусть сила ...