我安装了ELK Docker 容器。
我使用以下参数运行它:
sudo docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -p 5000:5000 -it --name elk sebp/elk
检查检查:
sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4f42137c954d sebp/elk:latest "/usr/local/bin/star 22 hours ago Up 22 hours 0.0.0.0:5000->5000/tcp, 0.0.0.0:5044->5044/tcp, 0.0.0.0:5601->5601/tcp, 0.0.0.0:9200->9200/tcp, 9300/tcp elk
乔,看起来不错。
这是 KVM 客户机的外部接口,Docker 容器驻留在其中:
marius@elk:~$ ifconfig eth0 eth0 链路封装:以太网 HWaddr 52:54:00:15:cf:f2
inet addr:192.168.100.134 Bcast:192.168.100.255 掩码:255.255.255.0
但是 KVM 网络接口中的端口 5044(例如用于 Elastic Beats)已关闭:
marius@elk:~$ nc -v 192.168.100.134 5044
nc: connect to 192.168.100.134 port 5044 (tcp) failed: Connection refused
造成这种情况的原因似乎是我造成了混乱:
marius@elk:~$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (1 references)
target prot opt source destination
ACCEPT tcp -- anywhere 172.17.0.4 tcp dpt:5000
ACCEPT tcp -- anywhere 172.17.0.4 tcp dpt:5044
ACCEPT tcp -- anywhere 172.17.0.4 tcp dpt:5601
ACCEPT tcp -- anywhere 172.17.0.4 tcp dpt:9200
重启后 Docker 容器的新 IP172.17.42.1
是0.4
marius@elk:~$ /sbin/ifconfig docker0 链接封装:以太网 HWaddr a6:3d:01:38:7a:6a
inet addr:172.17.42.1 Bcast:0.0.0.0 掩码:255.255.0.0
那么,我该如何重启/管理 Docker 容器,以免遇到 IPtables 冲突
我应该如何修复这个问题而不每次都造成 Docker / IPtables 混乱?我不想手动清除 Docker 的 iptables。
答案1
首先,这是因为你的操作有点误解。Docker 容器在 docker 网络内具有动态 IP 寻址。如果你尝试依赖静态 IP 寻址,那你就是在自找麻烦。
所以不要 - 习惯这个想法:虽然容器必须有 IP 地址才能工作,但你永远不应该直接引用它们。你有许多方法可以避免这种情况:
docker inspect
+ 将环境变量传递给容器。- 使用较新的docker(1.10+),你有一个名称服务
- haproxy 可以动态地将流量重新路由到一系列 IP 地址,因此您可以使用类似
haproxy
++confd
之类的东西etcd
来“检测”容器位置,并动态地将新条目添加到 haproxy 配置中。