A maneira mais simples é criar uma nova imagem: geralmente, você sempre quer que o contêiner docker e as imagens sejam reproduzíveis. Se você alterar manualmente algo que se desvia da sua imagem, você se rouba desse comportamento (algo em que alguém mais gerenciando a infraestrutura em que você está trabalhando) esperaria.
Atualmente não há uma maneira limpa de fazer isso por meio da API do Docker , mas verifique se há um novo desenvolvimento em sua documentação.
Especificamente, há um relatório de erros (volumes / portas editáveis / alteráveis no github) que você pode querer comentar on / subscribe to if isso lhe interessa.
Neste momento, gerenciar diretamente o DNAT com o iptables é o caminho a ser seguido. É como o docker faz isso de qualquer maneira, mas esteja ciente de que além do efeito desejado, não tenho certeza se há efeitos colaterais (por exemplo, o docker tentando adicionar novamente essas regras, etc.)
Primeiro, você terá que procurar a porta encaminhada na seguinte lista:
iptables -t nat --line-numbers --numeric --list
que produz uma saída como esta:
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
então, você pode excluir a (s) regra (s) correspondente (s) usando
iptables -t nat -D DOCKER $num, por ex. para substituir a regra que corresponde à porta 8081 você tem que usar
iptables -t nat -D DOCKER 2
Aproveite!