我安装了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
乔,看起来不错。
以下是Docker容器驻留的KVM guest虚拟机的外部接口:
marius @ elk:〜$ ifconfig eth0 eth0 Link encap:Ethernet HWaddr 52:54:00:15:cf:f2
inet addr:192.168.100.134 Bcast:192.168.100.255 Mask:255.255.255.0
但是在KVMnetworking接口中closures了端口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容器的新IP为172.17.42.1
和0.4
marius @ elk:〜$ / sbin / ifconfig docker0 Link encap:Ethernet HWaddr a6:3d:01:38:7a:6a
inet addr:172.17.42.1 Bcast:0.0.0.0掩码:255.255.0.0
那么,如何以某种方式重新启动/pipe理Docker容器,这样我就不会遇到IPtables冲突
如何解决这个问题,而不是每次都创build一个Docker / IPtables混沌? 我不想手动清除Docker的iptables。
首要的是 – 这是因为你有一点误解。 Docker容器在Dockernetworking中具有dynamicIP地址。 如果你试图依靠这种静态的方式,你就会痛苦的。
所以不要 – 只是习惯于容器必须有IP地址工作的想法,你不应该直接引用它们。 你有很多避免这种情况的方法:
docker inspect
+将环境variables传递给容器。 haproxy
+ confd
+ etcd
来“检测”容器位置,并dynamic地将新条目添加到haproxyconfiguration中。