在笔记本服务器容器中使用系统级功能

时间:2019-07-08 15:43:21

标签: python docker jupyter-notebook jupyter jupyterhub

我正在尝试使用此存储库作为起点来部署JupyterHub:https://github.com/jupyterhub/jupyterhub-deploy-docker

好消息是,我能够成功部署JupyterHub,登录并开始为用户生成笔记本服务器。此外,这些笔记本计算机服务器按预期运行。

下一步是自定义笔记本图像,以更好地适应我的用例。为此,我修改了在“ singleuser”目录中找到的“ Dockerfile”。现在看起来像这样:

FROM jupyter/datascience-notebook
USER root
RUN python3 -m pip install --no-cache requests fastapi pydantic pytest six pymlconf authlib python-dotenv multiping ping3

再次启动JupyterHub之后,目标是使用ping3库尝试对我们实验室中的某些服务执行ping操作。但是,此操作失败,并显示如下所示的权限错误。

Jupyter Notebook中的代码:

from ping3 import ping, verbose_ping
ping('google.com', unit='ms')

错误消息:

---------------------------------------------------------------------------
PermissionError                           Traceback (most recent call last)
<ipython-input-1-3ca020a44cd6> in <module>
      1 from ping3 import ping, verbose_ping
----> 2 ping('google.com', unit='ms')

/opt/conda/lib/python3.7/site-packages/ping3.py in ping(dest_addr, timeout, unit, src_addr, ttl, seq, size)
    163         PingError: Any PingError will raise again if `ping3.EXCEPTIONS` is True.
    164     """
--> 165     with socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP) as sock:
    166         sock.setsockopt(socket.SOL_IP, socket.IP_TTL, ttl)
    167         if src_addr:

/opt/conda/lib/python3.7/socket.py in __init__(self, family, type, proto, fileno)
    149             if proto == -1:
    150                 proto = 0
--> 151         _socket.socket.__init__(self, family, type, proto, fileno)
    152         self._io_refs = 0
    153         self._closed = False

PermissionError: [Errno 1] Operation not permitted

非常感谢任何建议或指导,谢谢!

1 个答案:

答案 0 :(得分:0)

它是一个 PermissionError,这意味着您需要超级用户/管理员/root 的权限才能发出 ICMP ping 包。