解决虚拟机Debian 8/9 安装docker错误
解决虚拟机Debian 8/9 安装docker错误
发现问题
最近需要在虚拟机上跑一个程序, 基于docker的, 实习公司只提供了Debian 8/9 的虚拟机镜像, 所以需要安装docker。
安装的时候出现错误:
1 | INFO[2019-06-30T14:16:01.754253188+08:00] Loading containers: start. |
发现可能与NAT、iptables有关, 直接从错误信息中, 可以看出原因是can't initialize iptables table 'nat'
。
但在网上找了很多, 发现也有很多人遇到这样的问题, 并没解决, 然后使用官网上的其他安装方法, 不论哪种安装方法都会有这种问题。
之后尝试运行 dockerd
, 发现 docker-ce 实际上是已经安装好了的, 但是在启动的时候出现了同样的问题, 有什么东西禁止了docker启动。
解决问题
找到一位资深人士, 在他的帮助下, 找到了问题, 并解决(非常感谢)。
确定问题应该是iptables被虚拟机禁用了, 而Debian每次加载模块是根据/etc/modprob.d/
目录下的配置文件。
我们可以看下nf-blacklist.conf文件
1 | alias iptable_nat none |
这下一下子就发现问题所在, iptable_nat被禁用了, 删掉跟iptable_nat有关的语句就好了。更方便一点的话, 其实可以直接将nf-blacklist.conf改个名字。
最后运行
1 | docker run hello-world |
确定docker安装成功!
继续学习
iptables
iptables是我们在实际生产环境中大量的使用的工具, 它能对进出主机的数据进行过滤以及转发等等。
iptables用于在Linux内核中设置、维护和检查IP包的过滤规则(rules)表。可以定义几个不同的规则表(table), 同时每个表包含许多内置链(chain), 也可能包含用户定义的链。
每个链则是一系列可以匹配一组数据包的规则, 就是说“如果数据包头符合这样的条件, 就这样处理这个数据包”。
简而言之, iptables是一个用于IPv4数据包过滤和NAT的管理工具。
参考:
iptable nat
iptables利用nat表, 能够实现NAT功能, 将内网地址与外网地址进行转换, 完成内外网之间的通信。