无法连接到docker中的套接字:许可错误:[错误1]不允许操作

z2acfund  于 2023-08-03  发布在  Docker
关注(0)|答案(1)|浏览(118)

我有一个应用程序,我正在尝试移动到一个docker容器。我的大多数功能都正常工作,但是应用程序中需要提升权限(使用套接字和配置网络参数)的部分似乎无法正常工作。
我尝试过的:

  • 给出--privileged标志
  • 给出--cap-add=NET_ADMIN标志
  • 删除--security-opt apparmor=unconfined --security-opt seccomp=unconfined的安全选项
  • 在Dockerfile中添加用户组和sudo

这是我得到的错误:

Process Process-2:
Traceback (most recent call last):
  File "/usr/local/lib/python3.9/multiprocessing/process.py", line 315, in _bootstrap
    self.run()
  File "/usr/local/lib/python3.9/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/app/support_files/wizard_configuration_routines.py", line 781, in find_device
    device_list = scan_subnet('192.168.30.0/24',g_interface)
  File "/app/support_files/wizard_configuration_routines.py", line 757, in scan_subnet
    answered, unanswered = scapy.arping(subnet,verbose=False,iface=g_interface)
  File "/usr/local/lib/python3.9/site-packages/scapy/layers/l2.py", line 890, in arping
    ans, unans = srp(
  File "/usr/local/lib/python3.9/site-packages/scapy/sendrecv.py", line 687, in srp
    s = iface.l2socket()(promisc=promisc, iface=iface,
  File "/usr/local/lib/python3.9/site-packages/scapy/arch/linux.py", line 484, in __init__
    self.ins = socket.socket(
  File "/usr/local/lib/python3.9/socket.py", line 232, in __init__
    _socket.socket.__init__(self, family, type, proto, fileno)
PermissionError: [Errno 1] Operation not permitted

字符串
以下是相关档案
停靠文件

# Slim version of Python
FROM python:3.9-slim

# Download Package Information
RUN apt update -y

# Install Tkinter
RUN apt install tk -y

# Install fontconfig
RUN apt install fontconfig -y

# Install Pillow
RUN python3 -m pip install Pillow
RUN python3 -m pip install ouster-sdk
RUN python3 -m pip install scapy
RUN python3 -m pip install customtkinter
RUN apt install net-tools -y
RUN fc-cache -f -v

# Commands to run Tkinter application
CMD ["/app/SCOT_wizard.py"]
ENTRYPOINT ["python3"]


build.sh

sudo docker build -t tkinter_in_docker .


run.sh

sudo docker run -u=$(id -u $USER):$(id -g $USER) \
 -e DISPLAY=$DISPLAY \
 -v /tmp/.X11-unix:/tmp/.X11-unix:rw \
 -v $(pwd)/app:/app \
 -v $(pwd)/logs:/logs \
 -v $(pwd)/records:/records \
 -v $(pwd)/fonts:/.fonts\
 -w /app \
 --privileged \
 --cap-add=NET_ADMIN \
 --security-opt apparmor=unconfined --security-opt seccomp=unconfined \
 --rm \
  tkinter_in_docker

brccelvz

brccelvz1#

尝试以root用户身份运行容器。要做到这一点,你可以添加到Dockerfile行:

USER root

字符串
或者使用-u参数运行容器:

docker run -u root <image-name>

相关问题