You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器虚拟主机配置问题:ERR_NAME_NOT_RESOLVED错误排查

解决Docker虚拟主机ERR_NAME_NOT_RESOLVED问题

嘿,我来帮你拆解下这个问题——你能通过localhost:8000正常访问,但敲http://borgesmelo.local/就提示域名解析失败,本质是两个关键配置没到位,咱们一步步来:

1. 本地系统的hosts文件缺失域名映射

ERR_NAME_NOT_RESOLVED说白了就是浏览器找不到这个域名对应的IP地址,所以得手动告诉本地系统:borgesmelo.local指向你的宿主机IP(一般是127.0.0.1)。

  • Windows系统:找到C:\Windows\System32\drivers\etc\hosts文件,用管理员权限打开,添加一行:

    127.0.0.1 borgesmelo.local
    

    保存后执行ipconfig /flushdns刷新DNS缓存。

  • Linux/macOS系统:打开终端,编辑/etc/hosts文件:

    sudo nano /etc/hosts
    

    同样添加127.0.0.1 borgesmelo.local,保存后执行sudo dscacheutil -flushcache(macOS)或者sudo systemctl restart nscd(Linux)刷新缓存。

2. Docker缺少反向代理服务配置

看你的docker-compose.yml,目前只有数据库服务,没有负责处理HTTP请求的反向代理(比如Nginx)。localhost:8000能访问应该是你直接把某个web容器的8000端口映射到了宿主机,但域名访问需要反向代理来把borgesmelo.local的请求转发到对应的web容器。

给你补一个完整的示例配置,在原来的compose文件里加个Nginx服务:

version: '3.3'
services:
  borgesmelo_db:
    image: mariadb:latest
    container_name: borgesmelo_db
    restart: always
    volumes:
      - ./mariadb/:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: My@159#Sql

  # 新增反向代理服务
  borgesmelo_proxy:
    image: nginx:latest
    container_name: borgesmelo_proxy
    restart: always
    ports:
      - "80:80"  # 把宿主机80端口映射到容器80,域名默认走80端口
    volumes:
      - ./nginx/conf.d/:/etc/nginx/conf.d/  # 挂载自定义Nginx配置目录
    depends_on:
      - borgesmelo_db  # 如果你的web服务依赖数据库,这里也可以加web服务的名称

  # 假设你的web服务是这样的(根据实际情况调整)
  borgesmelo_web:
    image: your-web-image:latest  # 替换成你实际的web镜像
    container_name: borgesmelo_web
    restart: always
    volumes:
      - ./web/:/var/www/html/  # 挂载代码目录
    depends_on:
      - borgesmelo_db

然后在宿主机上创建./nginx/conf.d/目录,新建borgesmelo.conf配置文件,内容如下:

server {
    listen 80;
    server_name borgesmelo.local;

    location / {
        # 这里替换成你的web服务容器名称和内部端口,比如上面的borgesmelo_web和它的内部端口(一般是80)
        proxy_pass http://borgesmelo_web:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

这样配置后,当你访问http://borgesmelo.local/时,请求会先到宿主机80端口,被Nginx容器接收,然后转发到你的web容器,就能正常访问了。

3. 额外注意点

  • 确保所有相关容器(web、代理、数据库)都在同一个Docker网络里——默认情况下,docker-compose会自动创建一个共享网络,只要它们在同一个compose文件里就没问题。
  • 不要直接把web容器的端口映射到宿主机(除非测试用),通过反向代理转发更安全也更符合域名访问的逻辑。

内容的提问来源于stack exchange,提问作者Roberto Godoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:54:27