У меня есть несколько служб, работающих на машине в контейнерах докеров, которые должны быть доступны для определенного IP-адреса и должны быть доступны для контейнеров со ссылками (как определено в файле docker-compose). Я пробовал эти команды, но похоже, что это также отбрасывает пакеты из контейнеров в той же сети докеров:
iptables -I DOCKER-USER ! -s 8.8.8.8/32 -p tcp -m tcp --dport 1234 -j DROP
iptables -I DOCKER-USER ! -s 8.8.8.8/32 -p tcp -m tcp --dport 12345 -j DROP
Как мне настроить iptables для отбрасывания пакетов, идущих на порты 1234 и 12345 со всех IP-адресов, кроме 8.8.8.8 и любого контейнера со ссылками (как определено в файле docker-compose)?
docker-compose, похоже, создает интерфейс моста и множество виртуальных интерфейсов со случайными именами (по одному для каждого контейнера?).
Вот файл docker-compose.yml, который я использую:
version: '3'
services:
django:
build: .
image: django
depends_on:
- mysql-db
- sel
ports:
- "80:54321"
links:
- mysql-db
- sel
- rabbit
- redis
volumes:
- vol1:/media/DataRaid1/vol1
- /etc/secret_key.txt:/etc/secret_key.txt
- django-media:/var/www/media
environment:
- DJANGO_SETTINGS_MODULE=a_project.settings_production
- COMMIT
command: httpd-foreground"
mysql-db:
image: mysql:5.7.18
environment:
- MYSQL_ROOT_PASSWORD=APASSWORD
volumes:
- mysql-data:/var/lib/mysql
- ./custom-mysql.cnf:/etc/mysql/conf.d/custom-mysql.cnf
sel:
image: "selenium/standalone-chrome"
volumes: #Fixes bug https://github.com/elgalu/docker-selenium/issues/20
- /dev/shm:/dev/shm
# Redis
redis:
image: redis:4.0.9
hostname: redis
ports:
- "1234:1234"
# RabbitMQ
rabbit:
hostname: rabbit
image: rabbitmq
environment:
- RABBITMQ_DEFAULT_USER=AUSER
- RABBITMQ_DEFAULT_PASS=APASSWORD
ports:
- "12345:12345"
# Celery worker
worker:
build: .
command: bash -c "sleep 10 && celery worker -A a_project.celeryconf -Q default -n default@%h"
volumes:
- .:/var/www
links:
- mysql-db
- rabbit
- redis
depends_on:
- rabbit
environment:
- DJANGO_SETTINGS_MODULE=a_project.settings_production
- C_FORCE_ROOT=true
volumes:
vol1:
mysql-data:
django-media:
Используйте сетевой режим для каждого контейнера:
network_mode: "host"
Используйте порты с привязкой к 127.0.0.1 + какой-нибудь прокси-контейнер:
ports:
- "127.0.0.1:12345:12345"
Не использовать порты вообще + какой-то прокси-контейнер