背景

  在docker容器中部署了一微服务,该服务需要docker push镜像到docker registry。因此,docker容器中需要安装docker服务。但在启动容器的时候,却报错:

can't initialize iptables table `filter': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.

原因

  在容器中部署docker服务,而docker服务又会使用到iptables,因此在启动容器时,也会同时启动容器内的iptables。但iptables必须工作在容器的privileged模式下,否则就会如上报错。

解决方法

  在启动容器时加上对应的privileged参数。

docker中启动容器

docker run -privileged [imageName]

Marathon中启动容器

{
  ...
  "instances": 1,
  "container": {
    "type": "DOCKER",
    "volumes": [],
    "docker": {
      "image": "imageName",
      "network": "BRIDGE", 
      "privileged": true,
      "parameters": [],
    }
  }
  ...
}