Кэдди прокси в докере дает пустой ответ
У меня есть док-контейнер под управлением Caddy и другой веб-сервер.
В моем Dockerfile
я имею
EXPOSE 80 10240 # 10240 is the port of the other webserver.
И я запускаю докер, как это (не спрашивайте мой, почему вам нужно EXPOSE
а также -p
).
docker run -p 80:80 -p 10240:1024 -it <hash>
Это запускает два сервера. На моем хост-компьютере (это Mac между прочим) я могу подключиться к localhost:10240
хорошо. Однако, если я подключусь к localhost:80
Я получаю пустой ответ (обрыв соединения).
Netstat в Docker-контейнере показывает:
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
в контейнере докера это работает нормально - я получаю веб-страницу с сервера 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
, Так или иначе мои запросы проходят, но Кэдди падает localhost
запросы извне контейнера, а внутри - нет. У меня включено ведение журнала, но оно ничего не печатает.
Кто-нибудь может сказать мне, что, черт возьми, происходит? Вся эта переадресация портов является нелепой.
Вот мой Caddyfile (и я пробовал около миллиарда других комбинаций localhost
, 127.0.0.1
, так далее.):
localhost:80
bind 0.0.0.0
proxy / 127.0.0.1:10240
1 ответ
Я не уверен, но я подозреваю, что это произошло потому, что Docker для Mac работает как- то не так. Я отказался от Caddy и попытался сделать то же самое с Traefik, который тоже не работал (хотя вместо полной разрыва соединения он выдавал "ошибку шлюза").
Как только все перенесли в Linux, все заработало отлично.