首页 > 解决方案 > 在 Ubuntu 仿生容器中运行 Docker

问题描述

我在最新的 Ubuntu Docker 映像上安装 Docker CE 并收到以下错误。我仔细按照安装说明进行操作;也许在 Docker 容器上安装 Docker 不是解决这个问题的方法?我正在使用 Jenkins Pipelines 并将 Jenkins 安装在 Ubuntu 容器上;下一部分是让 Docker 运行。

time="2018-10-26T13:25:09.920187300Z" level=info msg="scheme \"unix\" not registered, fallback to default scheme" module=grpc
time="2018-10-26T13:25:09.920228600Z" level=info msg="ccResolverWrapper: sending new addresses to cc: [{unix:///var/run/docker/containerd/docker-containerd.sock 0  <nil>}]" module=grpc
time="2018-10-26T13:25:09.920250500Z" level=info msg="ClientConn switching balancer to \"pick_first\"" module=grpc
time="2018-10-26T13:25:09.920286200Z" level=info msg="pickfirstBalancer: HandleSubConnStateChange: 0xc420047e60, CONNECTING" module=grpc
time="2018-10-26T13:25:09.920480100Z" level=info msg="pickfirstBalancer: HandleSubConnStateChange: 0xc420047e60, READY" module=grpc
time="2018-10-26T13:25:09.920501400Z" level=info msg="Loading containers: start."
time="2018-10-26T13:25:09.920666400Z" level=warning msg="Running modprobe bridge br_netfilter failed with message: , error: exec: \"modprobe\": executable file not found in $PATH"
time="2018-10-26T13:25:09.920704800Z" level=warning msg="Running modprobe nf_nat failed with message: ``, error: exec: \"modprobe\": executable file not found in $PATH"
time="2018-10-26T13:25:09.920733300Z" level=warning msg="Running modprobe xt_conntrack failed with message: ``, error: exec: \"modprobe\": executable file not found in $PATH"
Error starting daemon: Error initializing network controller: error obtaining controller instance: failed to create NAT chain DOCKER: iptables failed: iptables -t nat -N DOCKER: iptables v1.6.1: can't initialize iptables table `nat': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.
 (exit status 3)

标签: docker

解决方案


典型的 Docker 容器使用一组受限的权限运行。即使root在容器中,也不能修改网络配置,也不能挂载文件系统。所以你看到的错误......

启动守护程序时出错:初始化网络控制器时出错:获取控制器实例时出错:无法创建 NAT 链 DOCKER:iptables 失败:iptables -t nat -N DOCKER:iptables v1.6.1:无法初始化 iptables 表“nat”:权限被拒绝(你必须是root)

...由于该限制而发生。您可以通过使用以下容器创建容器来创建不受限制的容器:

docker run --privileged ...

也许可以使用稍微更细化的东西并授予该NET_ADMIN功能,如下所示:

docker run --cap-add NET_ADMIN ...

只要容器所需的唯一“特殊”权限是网络配置,这将起作用。


推荐阅读