docker - 在 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 容器使用一组受限的权限运行。即使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 ...
只要容器所需的唯一“特殊”权限是网络配置,这将起作用。
推荐阅读
- c# - CLR - 使用“标志”属性声明枚举
- slack - Grafana - Slack 警报不显示图像
- java - 杰克逊:@JsonTypeInfo 和 @JsonSerialize(as=Klass.class) 冲突
- sql - 如果变量不为空,则使用 where 子句查询
- mysql - MySQL 中的 INSERT/SELECT SQL 问题
- javascript - 如何根据不同的情况贪婪地捕获正则表达式?
- ios - 更改现有 MKAnnotation 上的自定义图像
- python - 使用python从给定矩阵中随机选择特征
- r - 警告:错误
: 无法打开文件'Rplots.pdf' - javascript - 在不使用额外助手的情况下限制 Handlebars #each 中的结果