Разрешить контейнеру Docker подключаться только к определенным IP-адресам

Не используйте строки для построения регулярных выражений, используйте qr//. Есть одно важное отличие :при объединении двух регулярных выражений, созданных qr//, каждое из них сначала оборачивается (?:...). Когда две строки объединяются, вы просто получаете строку, содержащую первую строку, за которой следует вторая. Но $baseсодержит символ вертикальной черты, диапазон которого будет ограничен закрывающим (?:...). См.

my $s = "A',";
my $r = 'A|\{';

print $s =~ $_ ? 1 : 0
    for qr/$r,/,      # 1
        qr/(?:$r),/;  # 0

Кроме того, использование переменной, содержащей имя переменной, не интерполирует вторую переменную в регулярном выражении, происходит только один уровень интерполяции:

my $r = 'A';
my $s = '$r';
print "A" =~ /$s/;  # Doesn't match.

Более того, \1в строке в двойных кавычках (и замена в подстановке ведет себя как строка в двойных кавычках )означает chr(1).Perl использует $1для ссылки на первую подходящую группу. Но опять же, использование переменной, содержащей $1, не расширит ее, так как происходит только один уровень интерполяции.

my $s = 'ABC';
my $r = '$1';
say $s =~ s/(A)BC/$r/r;  # $1

Вы можете использовать модификатор /eeдля принудительной второй интерполяции, но тогда замещающая часть должна быть синтаксически написана на языке Perl, например.

my $s = 'ABC';
my $r = '"(". $1. ")"';
say $s =~ s/A(B)C/$r/ree;  # (B)
2
04.05.2021, 05:38
1 ответ

Хорошо, после половины --часа RTFM я нашел решение.

Все на хосте докера:

  1. Найти идентификатор интерфейса моей -ограниченной -сети:
docker network ls | grep my-restricted-network
38d3c24a48ad   my-restricted-network   bridge    local
  1. Вставьте следующие правила:
iptables -I DOCKER-USER -i br-38d3c24a48ad -j DROP
iptables -I DOCKER-USER -i br-38d3c24a48ad -d 192.168.1.150 -j ACCEPT
iptables -I DOCKER-USER -i br-38d3c24a48ad -d <static_ip> -j ACCEPT
3
28.07.2021, 11:35

Теги

Похожие вопросы