7

我尝试在使用非 root 用户的 docker 容器内运行一个简单的 python UDP echo-server 监听端口 507。Dockerfile 看起来像这样:

FROM docker.io/centos

RUN yum -y install iputils iproute
COPY echo-server.py /tmp/
USER 1000
CMD ["python", "/tmp/echo-server.py"]

由于 507 是一个众所周知的端口,我还在发出 docker run 时添加了能力 NET_BIND_SERVICE 但我仍然收到错误:

# docker run --cap-add=NET_BIND_SERVICE 4d1c2301b166
Traceback (most recent call last):
  File "/tmp/echo-server.py", line 12, in <module>
    s.bind(('', port))
  File "/usr/lib64/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 13] Permission denied

在检查功能时,我可以看到使用非 root 用户时未设置有效功能。

[root@srv-tcn-01 ha-service]# docker run --cap-add=NET_BIND_SERVICE 4d1c2301b166 grep Cap /proc/self/status
CapInh: 00000000a80425fb
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: 00000000a80425fb

有谁知道如何在具有非 root 用户和某些功能的 Docker 容器中运行程序?

4

0 回答 0