У меня есть док-контейнер с Caddy и другой веб-сервер.
В моем Dockerfile
у меня есть
EXPOSE 80 10240 # 10240 is the port of the other webserver.
И я запускаю Docker вот так (не спрашивайте мойпочему вам нужны EXPOSE
и -p
).
docker run -p 80:80 -p 10240:1024 -it <hash>
Запустится два сервера.На моем хост-компьютере (это Mac между прочим) я могу подключиться к localhost:10240
нормально.Однако, если я подключаюсь к localhost:80
, я получаю пустой ответ (разорванное соединение).
Netstat в контейнере докера показывает:
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:10240 0.0.0.0:* LISTEN 19/node
tcp6 0 0 :::80 :::* LISTEN 9/caddy
Вот где это начинает становиться странным.Если я curl -L localhost
в контейнере Docker, он работает нормально - я получаю веб-страницу с сервера 10240.
Если я curl -L 127.0.0.1
из контейнера Docker, он возвращает 404 Site 127.0.0.1 is not served on this interface
.Хорошо, хорошо.
Если я curl -L 127.0.0.1
из снаружи , контейнер его также возвращает 404 Site 127.0.0.1 is not served on this interface
.Так или иначе, мои запросы проходят , но Caddy отбрасывает localhost
запросов извне контейнера, а внутри его нет.У меня включено ведение журнала, но оно ничего не печатает.
Может кто-нибудь сказать мне, что, черт возьми, происходит?Все эти вещи с переадресацией портов являются нелепыми.
Вот мой Caddyfile (и я пробовал около миллиарда других комбинаций localhost
, 127.0.0.1
и т. Д.):
localhost:80
bind 0.0.0.0
proxy / 127.0.0.1:10240