Search code examples
dockercaddycaddyfile

Caddy proxy in docker gives empty response


I have a docker container running Caddy, and another web server.

In my Dockerfile I have

EXPOSE 80 10240   # 10240 is the port of the other webserver.

And I run docker like this (don't ask my why you need EXPOSE and -p).

docker run -p 80:80 -p 10240:1024 -it <hash>

This starts the two servers. On my host machine (it's a Mac btw) I can connect to localhost:10240 fine. However if I connect to localhost:80, I get an empty response (dropped connection).

Netstat in the docker container shows:

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         

Here's where it starts to get weird. If I curl -L localhost within the docker container, it works fine - I get the web page from the 10240 server.

If I curl -L 127.0.0.1 from within the docker container it returns 404 Site 127.0.0.1 is not served on this interface. Ok fine.

If I curl -L 127.0.0.1 from outside the container it also returns 404 Site 127.0.0.1 is not served on this interface. So somehow my requests are getting through, but Caddy drops localhost requests from outside the container, and it doesn't from inside it. I have logging enabled but it prints nothing.

Can anyone tell me what the hell is going on? All this docker port forwarding stuff is ridiculous.

Here's my Caddyfile (and I've tried about a billion other combinations of localhost, 127.0.0.1, etc.):

localhost:80
bind 0.0.0.0
proxy / 127.0.0.1:10240

Solution

  • I am not sure but I suspect this was because Docker for Mac's networking is kind of broken. I gave up on Caddy and tried to do the same think with Traefik, which also didn't work (though it gave a "Gateway error" instead of totally dropping the connection).

    As soon as moved everything to Linux, it worked perfectly.