我安装了 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 来宾的外部接口:
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
但是端口 5044(例如用于 Elastic Beats)在 KVM 网络接口中关闭:
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 Mask:255.255.0.0
那么,如何以某种方式重新启动/管理 Docker 容器,以免遇到 IPtables 冲突
我该如何解决这个问题,而不会每次都造成 Docker / IPtables 混乱?我不想手动清除 Docker 的 iptables。
首先也是最重要的 - 这是因为您的操作有点误解。Docker 容器在 docker 网络中具有动态 IP 地址。如果您尝试并依靠它是静态的,那么您就是在要求痛苦。
所以不要 - 只是习惯这样的想法,虽然容器必须有 IP 地址才能工作,但你永远不应该直接引用它们。您有多种方法可以避免这种情况:
docker inspect
+ 将环境变量传递给容器。haproxy
来confd
“etcd
检测”容器位置,并动态地将新条目添加到 haproxy 配置中。