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

如何在Docker中通过服务名作为URL从宿主机访问容器服务

可行实现方案

方案1:固定IP+修改hosts(最轻量,无额外依赖,适合服务数量少且变动少的场景)

首先修改你的docker-compose配置,为所有服务分配固定的静态IP:

# 先声明自定义网桥,指定子网段
networks:
  ms-bridge:
    ipam:
      config:
        - subnet: 172.28.0.0/16

services:
    service-one:
        container_name: container-service-one
        image: customimage1
        networks:
          ms-bridge:
            ipv4_address: 172.28.0.10
    service-two:
        container_name: container-service-two
        image: customimage1
        networks:
          ms-bridge:
            ipv4_address: 172.28.0.11

之后编辑宿主机的hosts文件:

  • Linux/macOS路径:/etc/hosts
  • Windows路径:C:\Windows\System32\drivers\etc\hosts
    添加如下映射关系:
172.28.0.10 service-one
172.28.0.11 service-two

配置完成后即可直接在宿主机执行curl service-one访问对应服务,如果你容器内服务监听的不是80端口,可额外添加iptables端口转发规则,将容器IP的80端口转发到服务实际监听端口即可。


方案2:本地Dnsmasq自动解析(适合服务多、频繁增减的场景)

无需搭建复杂私有DNS,仅需在宿主机部署轻量Dnsmasq服务:

  1. 宿主机安装Dnsmasq,配置将自定义后缀的服务域名解析请求,转发到Docker内置DNS服务器127.0.0.11
  2. 将宿主机的首选项DNS设置为127.0.0.1
  3. 所有服务加入同一个Docker网桥,无需固定IP,Docker内置DNS会自动维护服务名和容器IP的映射关系
    该方案新增服务时无需修改额外配置,自动完成解析,适配性更强。

方案3:Nginx反向代理(生产环境常用,适合所有服务为HTTP/HTTPS协议的场景)

在docker-compose中新增一个Nginx反向代理服务,绑定宿主机80/443端口,按域名分流到不同后端服务:

services:
  nginx-proxy:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./proxy.conf:/etc/nginx/conf.d/default.conf
    # 确保代理服务晚于业务服务启动
    depends_on:
      - service-one
      - service-two
  service-one:
    container_name: container-service-one
    image: customimage1
  service-two:
    container_name: container-service-two
    image: customimage1

对应的Nginx配置proxy.conf示例:

server {
    listen 80;
    server_name service-one;
    location / {
        # 替换为你业务服务实际监听的端口
        proxy_pass http://service-one:8080;
        proxy_set_header Host $host;
    }
}

server {
    listen 80;
    server_name service-two;
    location / {
        proxy_pass http://service-two:8080;
        proxy_set_header Host $host;
    }
}

最后只需在宿主机hosts中添加一行127.0.0.1 service-one service-two即可,所有服务名请求都会先到本地Nginx,再自动转发到对应容器服务。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:36:03