Чистый способ - создать новое изображение: обычно вы всегда хотите, чтобы ваш контейнер докера и изображения были воспроизводимыми. Если вы вручную изменяете что-то, отклоняющееся от вашего изображения, вы лишаете себя такого поведения (чего-то, чего ожидают другие, управляющие инфраструктурой, в которой вы работаете).
В настоящее время нет простого способа сделать это через Docker API, но обязательно проверьте, есть ли новая разработка в их документации.
В частности, есть отчет об ошибках (изменяемые / редактируемые тома / порты на github), к которым вы можете захотеть прокомментировать / подписаться, если вас это интересует.
Прямо сейчас прямое управление DNAT с помощью iptables.
Это все равно, как это делает docker, но имейте в виду, что помимо вашего желаемого эффекта я не уверен, есть ли какие-либо побочные эффекты (например, Docker пытается повторно добавить эти правила и т.д.)
Сначала вам нужно найти перенаправленный порт в следующем списке:
iptables -t nat --line-numbers --numeric --list
который производит вывод как это:
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
num target prot opt source destination
1 MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
Chain DOCKER (2 references)
num target prot opt source destination
1 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:172.17.1.1:80
2 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8081 to:172.17.1.2:80
3 DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8082 to:172.17.1.3:80
затем вы можете удалить соответствующие правила, используя
iptables -t nat -D DOCKER $num
Например, чтобы заменить правило, соответствующее порту 8081, вы должны использовать
iptables -t nat -D DOCKER 2
Наслаждайтесь!