我有一个运行 Caddy 的 docker 容器和另一个 Web 服务器。
在我的Dockerfile
我有
EXPOSE 80 10240 # 10240 is the port of the other webserver.
我像这样运行 docker(不要问我为什么需要EXPOSE
and -p
)。
docker run -p 80:80 -p 10240:1024 -it <hash>
这将启动两个服务器。在我的主机上(它是 Mac 顺便说一句)我可以localhost:10240
正常连接。但是,如果我连接到localhost:80
,我会得到一个空响应(断开连接)。
docker 容器中的 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
。所以不知何故,我的请求通过了,但是 Caddylocalhost
从容器外部丢弃了请求,而不是从容器内部。我启用了日志记录,但它什么也没打印。
谁能告诉我到底发生了什么?所有这些 docker 端口转发的东西都是荒谬的。
这是我的 Caddyfile(我已经尝试了大约 10 亿个其他的localhost
,127.0.0.1
等组合):
localhost:80
bind 0.0.0.0
proxy / 127.0.0.1:10240