Один из способов - установить iptables в образе вашего контейнера и назначить вашему контейнеру возможность ядра (7) NET_ADMIN
.
docker run --cap-add=NET_ADMIN ...
См. Справочник по запуску Docker и / или справочник по созданию файлов Docker
Затем вы можете добавить сценарий точки входа, файл cmd или .rules
, из которого вы загружаете набор правил при запуске контейнера. Или вы прямо встраиваете правила в изображение. В вашем случае содержимое сценария точки входа будет выглядеть так:
iptables -t nat -A PREROUTING -d 57.55.10.210 -j DNAT --to-destination 192.168.38.13
iptables -t nat -A POSTROUTING -s 192.168.38.13 -j SNAT --to-source 57.55.10.210
Или с файлом .rules
в скрипте точки входа выполните:
/sbin/iptables-restore /some-mounted-volume-or-file
Чтобы получить файл правил, вы можете вызвать один запуск вашего контейнера:
docker run --cap-add=NET_ADMIN --rm somethingwith/iptables /bin/bash -c "iptables -t nat -A PREROUTING -d 57.55.10.210 -j DNAT --to-destination 192.168.38.13; iptables -t nat -A POSTROUTING -s 192.168.38.13 -j SNAT --to-source 57.55.10.210; /sbin/iptables-save" > outside-of-container.rules
Что даст вам что-то вроде:
# Generated by iptables-save v1.6.1 on Fri Feb 8 14:42:52 2019
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -d 57.55.10.210/32 -j DNAT --to-destination 192.168.38.13
-A POSTROUTING -s 192.168.38.13/32 -j SNAT --to-source 57.55.10.210
COMMIT
# Completed on Fri Feb 8 14:42:52 2019
Насколько я знаю, этот подход не должен мешать другим контейнерам на хосте.