У меня есть сервер Linux, на котором работает Jenkins (HTTP на порту 8080), и на том же сервере также работает Docker 1.12.1. Я использовал некоторые правила iptables (согласно официальным документам по установке Jenkins), чтобы перенаправить порт 8080 на порт 80 хоста, чтобы HTTP по умолчанию работал для Jenkins (т.Е. http://myserver
скорее, чем http://myserver:8080
):
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j REDIRECT --to-ports 8080
Однако эти правила нарушают способность Docker загружать правильные ресурсы через HTTP во время docker build
команда. Например, RUN apt-get update
сбой с несколькими ошибками "не удалось загрузить". Делающий wget http://www.google.com
внутри контейнера возвращается HTML-код для главной страницы Дженкинса. HTTP-запросы от хоста работают нормально. Удаление правил iptables приводит к RUN apt-get update
снова работаю. Поэтому я думаю, что эти правила iptables мешают сетевому механизму docker.
Может ли такое перенаправление портов сосуществовать с Docker? Если да, то как можно было бы написать правила iptables для решения этой проблемы?