在docker容器内导入socketio失败?

我已经构build了一个docker镜像,每个使用这个镜像的容器都会运行一个名为“run.py”的应用程序。

run.py使用socket.io:import import socketio

docker运行后我得到以下错误:

 Traceback (most recent call last): File "run.py", line 1, in <module> import socketio File "/usr/local/lib/python2.7/site-packages/socketio/__init__.py", line 8, in <module> from .zmq_manager import ZmqManager File "/usr/local/lib/python2.7/site-packages/socketio/zmq_manager.py", line 5, in <module> import eventlet.green.zmq as zmq File "/usr/local/lib/python2.7/site-packages/eventlet/__init__.py", line 10, in <module> from eventlet import convenience File "/usr/local/lib/python2.7/site-packages/eventlet/convenience.py", line 6, in <module> from eventlet.green import socket File "/usr/local/lib/python2.7/site-packages/eventlet/green/socket.py", line 21, in <module> from eventlet.support import greendns File "/usr/local/lib/python2.7/site-packages/eventlet/support/greendns.py", line 69, in <module> setattr(dns.rdtypes.IN, pkg, import_patched('dns.rdtypes.IN.' + pkg)) File "/usr/local/lib/python2.7/site-packages/eventlet/support/greendns.py", line 59, in import_patched return patcher.import_patched(module_name, **modules) File "/usr/local/lib/python2.7/site-packages/eventlet/patcher.py", line 119, in import_patched *additional_modules + tuple(kw_additional_modules.items())) File "/usr/local/lib/python2.7/site-packages/eventlet/patcher.py", line 93, in inject module = __import__(module_name, {}, {}, module_name.split('.')[:-1]) File "/usr/local/lib/python2.7/site-packages/eventlet/support/dns/rdtypes/IN/WKS.py", line 24, in <module> _proto_udp = socket.getprotobyname('udp') socket.error: protocol not found 

我的Dockerfile提供了一个官方的Python镜像,它安装了下面描述的需求,并在/ etc中添加了文件协议。 按照https://github.com/eventlet/eventlet/issues/370中的build议完成最后一步。

 #parent image: official python runtime FROM python:2.7-slim #workdir: /app WORKDIR /app #copy the current directory contents into the container in the path /app ADD . /app ADD protocols /etc #install packages contained in the text RUN pip install -r requirements.txt #make port 80 available to the world (outside the container) EXPOSE 8081 #execute a py app CMD ["python", "run.py"] 

要求是:

 Netbase python-socketio eventlet socketIO-client