我尝试在使用非root用户的docker容器内的端口507上运行一个简单的python UDP echo-server。 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容器中运行程序?