Как разрешить определенные порты для докера с использованием iptables -> dport использует порт в контейнере - PullRequest
0 голосов
/ 30 сентября 2019

На первом шаге я хочу заблокировать весь входящий трафик в док-контейнеры, запущенные на моем сервере. Поэтому я использую следующую запись iptables для ip моего внешнего интерфейса (ext_if):

iptables -I DOCKER-USER -i eth0 ! -s ext_if -j DROP

Затем я хочу открыть определенный порт для контейнера, который настроен в docker-compose (мой docker-compose.yml ниже) файл:

iptables -I DOCKER-USER -i docker0 -s 0.0.0.0/0 -p tcp --dport 9000 -j ACCEPT

Когда я пытаюсь открыть http://myserver:9000 в браузере извне, он не будет работать.

Что я могу сделать, чтобынастроить порт 9000 для доступа извне?

Я использую docker 19.03.2 и docker-compose 1.18.0 на выделенном сервере.

Это мой файл docker-compose.yml:

version: '3.3'
services:
  test-tomcat:
    image: tomcat:9.0.19-jre8
    ports:
      - 9000:8080
    container_name: test-tomcat
    restart: always
    entrypoint: catalina.sh jpda run
  test-tomcat2:
    image: tomcat:9.0.19-jre8
    ports:
      - 9001:8080
    container_name: test-tomcat2
    restart: always
    entrypoint: catalina.sh jpda run

Я немного поиграл с правилами iptable и понял, что

iptables -I DOCKER-USER -i docker0 -s 0.0.0.0/0 -p tcp --dport 8080 -j ACCEPT

даст мне доступ к http://myserver:9000 и http://myserver:9001.Я думаю, это потому, что оба контейнера слушают 8080 внутри.

...