Windows环境下Docker HRM部署异常:域名无响应IP访问正常
Hey there! Let's break down why you're hitting this problem with Docker HTTP Routing Mesh (HRM) on Windows. When you can reach your WordPress instance via the manager node IP (http://10.54.52.79:8000) but not the custom domain wordpress.example.com, it almost always traces back to one of these key areas:
1. DNS Resolution Failure
Your Windows machine doesn't know where to send requests for wordpress.example.com—it needs to map that domain to your HRM manager node's IP.
How to check:
Open Command Prompt and run:
nslookup wordpress.example.com
If the returned IP isn't 10.54.52.79, DNS is the issue.
Fixes:
- Quick test: Edit your Windows hosts file (
C:\Windows\System32\drivers\etc\hosts) with admin privileges, add this line:
Then flush DNS to apply changes:10.54.52.79 wordpress.example.comipconfig /flushdns - Long-term solution: If you're in an internal network, add an A record to your local DNS server pointing
wordpress.example.comto10.54.52.79.
2. Missing HRM Routing Rules
HRM needs explicit configuration to forward traffic from wordpress.example.com to your WordPress service. Without this rule, HRM has no idea where to send the domain's requests.
How to check:
First, confirm HRM services are running:
docker service ls
Look for hrm-proxy and hrm-manager in the output. Then list existing HRM routes:
docker hrm route ls
If wordpress.example.com isn't listed here, the route is missing.
Fix:
Create the route mapping your domain to your WordPress service:
docker hrm route create wordpress.example.com --service <your-wordpress-service-name>
Make sure your WordPress service is attached to HRM's dedicated network (more on that below).
3. Incorrect Port Usage for Domain Requests
When you use the IP address with :8000, you're targeting the exact port HRM listens on. But when you use wordpress.example.com, your browser defaults to port 80. If HRM isn't configured to listen on port 80, this request will fail.
How to check:
Inspect the HRM proxy service's port mappings:
docker service inspect hrm-proxy | findstr "Ports"
You'll likely see something like 8000:80/tcp, meaning HRM is exposing port 8000 externally for internal port 80.
Fixes:
- Option 1: Access the domain with the correct port:
http://wordpress.example.com:8000 - Option 2: Reconfigure HRM to listen on port 80 (requires admin privileges on Windows): Update the HRM proxy service to map port 80 instead of 8000, then restart the service.
4. HRM Network Isolation
HRM uses a dedicated network to route traffic between services. If your WordPress service isn't connected to this network, HRM can't forward requests to it—even though you can reach the service directly via the node IP.
How to check:
First, list Docker networks to find HRM's network (usually named hrm-network):
docker network ls
Then check if your WordPress service is connected to it:
docker service inspect <your-wordpress-service-name> | findstr "Networks"
Fix:
Connect your WordPress service to the HRM network:
docker service update --network-add <hrm-network-name> <your-wordpress-service-name>
Start with the DNS check first—it's the most common culprit for domain-based access issues. Work through each step one by one, and you should get wordpress.example.com working in no time!
内容的提问来源于stack exchange,提问作者abjinugu

