Прокси-сервер Caddy в докере дает пустой ответ

У меня есть док-контейнер с 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 в док-контейнере показывает:

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 из док-контейнера, он возвращает 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

person Timmmm    schedule 06.06.2018    source источник
comment
Это опечатка docker run -p 80:80 -p 10240:1024 -it ‹hash›? При этом вы опубликуете порт 1024 вместо 10240...   -  person namokarm    schedule 06.06.2018
comment
Ах да, это была опечатка. Я действительно использовал 10240.   -  person Timmmm    schedule 07.06.2018


Ответы (1)


Я не уверен, но подозреваю, что это произошло из-за того, что сеть Docker для Mac немного не работает. Я отказался от Caddy и попытался сделать то же самое с Traefik, который тоже не сработал (хотя он выдавал «ошибку шлюза» вместо полного разрыва соединения).

Как только перенес все на линукс, все заработало отлично.

person Timmmm    schedule 07.06.2018