我有一个NAS,我在那里运行各种网络应用程序在docker容器通过docker-compose。我希望这些网络应用程序中的一些可以通过互联网访问,而不仅仅是当我连接到我的家庭网络。
我目前面临的问题是,虽然cloudflare能够暴露默认的Web应用程序(例如,默认的NAS管理192.168.1.135:80
可以Map到subdomain.domain.com
),但它无法暴露我尝试运行的任何Docker容器(192.168.1.135:4444
无法Map到subdomain2.domain.com
),而且我到目前为止尝试的每个应用程序都收到502坏网关错误。
配置不应该是问题所在,也绝对不是NoTLSVerify
标志,因为应用程序在HTTP上运行,我已经这样配置了,所以我没有办法知道发生了什么以及如何解决它。
2条答案
按热度按时间nle07wnf1#
看起来您在NAS上运行的应用程序是通过Docker运行时代理的。因此,您需要添加到cloudflare隧道配置中的IP:port是可以从主机访问的端口(而不是主机本身的IP)。
如果主机是www.example.com,您需要知道要从外部访问的应用程序的IP(Docker网络内部),通常在www.example.com范围内。 192.168.1.135 , you need to know which the the IP (internal to the docker network) of the app that you want to access from the outside, typically in the 172.0.0.1/24 range.
示例:如果运行您想要访问的应用的container在172.0.0.2:4444(app1)和172.0.0.3:5555(app2)上运行,则cloudflare配置如下所示:
点击此处查看更多详情和视频:如何将子域重定向到端口(Docker)
qnakjoqk2#
原来问题是由于docker如何使用网络,而不是Cloudflare如何访问它们。我首先必须创建一个连接两个容器的网络,因为添加Cloudflare到我的docker-compose文件由于某种原因没有工作。
1.创建Docker网络
docker network create tunnel
1.运行docker * 而不 * 指定网络
docker run -d --name cloudflare cloudflare/cloudflared:latest tunnel --no-autoupdate run --token
1.将Docker添加到网络
docker network connect tunnel cloudflare
1.运行容器(注意,容器的网络名称应该与您之前创建的名称相同,但是cloudflare不应该在您的docker-compose文件中)
docker-compose up
1.在cloudflare隧道配置中,您必须指定容器的docker内部地址(如@lu4t所建议)。