7

root 以外のユーザーを使用する docker コンテナー内でポート 507 をリッスンする単純な python UDP エコー サーバーを実行しようとしました。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