手动创建DOCKER链
时间: 2024-12-16 11:31:36 浏览: 5
docker 开机自启动
5星 · 资源好评率100%
手动创建 `DOCKER` 链(也称为自定义网络策略)通常是在Docker的网络配置出现问题时,作为临时解决方案进行的。当你无法通过常规方式(如自动配置桥接网络)配置端口映射时,可能会需要操作iptables规则来添加一个新的链。
以下是基本步骤:
1. **停止并删除有问题的容器**:首先,为了安全起见,你需要停止并删除有问题的容器 (`docker stop <container_name> && docker rm <container_name>`)。
2. **进入root权限**:因为涉及到系统级的iptables规则,所以可能需要使用`sudo` 或者切换到root用户。
3. **查看现有的iptables规则**:运行 `iptables -L` 查看当前的iptables规则,了解现有规则集结构。
4. **创建新的chain**:在`nat`表下创建一个新链,例如 `sudo iptables -t nat -N DOCKER_CHAIN`。这里创建了一个名为 `DOCKER_CHAIN` 的新链。
5. **添加规则到新链**:根据你的需求,添加类似下面的规则到新链:
```bash
sudo iptables -t nat -A DOCKER_CHAIN -p tcp -d 0.0.0.0/0 --dport 18083 -j DNAT --to-destination 172.17.0.2:18083
```
这条规则告诉iptables从外部网络的18083端口接收数据包,并将其目的地址转换为容器内部的172.17.0.2:18083。
6. **启用新的chain并处理输出**:
```bash
sudo iptables -t nat -A POSTROUTING -o docker0 -j DOCKER_CHAIN
```
7. **检查并确认规则是否生效**:再次运行 `iptables -L` 确认新的规则已经添加到了 `POSTROUTING` 链,即已正确应用于网络出口。
8. **重启docker服务或重新启动容器**:最后,你可以选择重启docker守护进程(`service docker restart`),或者重启受影响的容器以便应用新的iptables规则。
注意这仅是一个临时的解决办法,长期而言还是推荐使用Docker内置的网络配置功能或修改网络配置文件。如果你经常需要这样做,建议查找更根本的问题原因。
阅读全文