Я установил контейнер 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 Link encap: Ethernet HWaddr 52: 54: 00: 15: cf: f2
inet адрес: 192.168.100.134 Bcast: 192.168.100.255 Маска: 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
И новый IP-адрес контейнера Docker после перезапуска будет 172.17.42.1
и 0.4
marius @ elk: ~ $ / sbin / ifconfig docker0 Link encap: Ethernet HWaddr a6: 3d: 01: 38: 7a: 6a
inet адрес: 172.17.42.1 Bcast: 0.0.0.0 Маска: 255.255.0.0
Итак, как мне перезапустить / управлять контейнером Docker таким образом, чтобы я не сталкивался с конфликтами IPtables
И как мне это исправить, не создавая каждый раз хаос Docker / IPtables? Я не хочу вручную сбрасывать Docker iptables.
В первую очередь - это потому, что вы действуете из-за небольшого заблуждения. Контейнеры Docker имеют динамическую IP-адресацию в сети Docker. Вы просите боли, если пытаетесь полагаться на статичность.
Так что не надо - просто привыкните к мысли, что, хотя контейнеры должны иметь IP-адреса для работы, вы никогда не должны обращаться к ним напрямую. У вас есть несколько способов избежать этого:
docker inspect
+ передать переменные среды в контейнеры.haproxy
+ confd
+ etcd
для «обнаружения» расположения контейнеров и динамического добавления новых записей в конфигурацию haproxy.