使用用户名称空间共享docker套接字

使用用户名称空间共享docker套接字,docker,linux-namespaces,Docker,Linux Namespaces,在使用用户名称空间时,是否可以使用从docker容器内的主机安装的docker套接字 我有以下配置: /etc/subuid user:100000:65536 /etc/subgid user:100000:65536 /etc/docker/daemon.json { "userns-remap": "ns-user" } 我创建了UID为100000的用户ns user和GID为100000的组ns user。额外

在使用用户名称空间时,是否可以使用从docker容器内的主机安装的docker套接字

我有以下配置:

/etc/subuid

 user:100000:65536
/etc/subgid

 user:100000:65536
/etc/docker/daemon.json

{                              
  "userns-remap": "ns-user" 
}
我创建了UID为100000的用户ns user和GID为100000的组ns user。额外性我已将ns用户添加到组docker。当我以ns用户身份登录主机时,我可以通过套接字使用docker

问题是,当我运行装有docker套接字的容器时,套接字上的权限被拒绝。docker容器内的套接字权限:

srw-rw---- 1 nobody nogroup 0 Jun 26 15:00 /var/run/docker.sock
编辑1:

为了澄清这一点,我认为容器中的root(uid0)映射到主机上的ns用户(uid100000),该用户有权访问docker套接字。但事实上我被拒绝了。为什么?


我不想使用--userns=host参数。

您可以使用
socat
为命名空间用户创建具有正确权限的套接字:

sudo socat UNIX-LISTEN:/var/run/docker-userns.sock,user=1000,group=1000,mode=0600,fork UNIX-CLIENT:/var/run/docker.sock &
您需要编写一个脚本,在启动容器之前启动它。如果套接字在docker之后出现,它仍然可以工作,您的容器可能会重新启动几次,直到它们能够连接到用户套接字


我一直在寻找比这更具可配置性的东西。可能会使用前面提到的使用pty模块的python脚本。

如何启动docker run命令?您是否正在设置
-v/var/run/docker.sock:/var/run/docker.sock
?docker run--rm-it--entrypoint bash-v/var/run/docker.sock:/var/run/docker.sock myimage,其中我的映像绑定了docker客户端。现在,我通过HTTP连接而不是使用套接字解决了这个问题。我将docker守护进程配置为仅在docker桥接口上绑定。但问题仍然悬而未决。是否可以使用套接字执行此操作?