You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在docker-compose.yml中配置带域名的主机名?

解决Docker Compose中worker服务无法解析web.local的问题

这个问题我之前踩过坑!Docker Compose的自定义网络里,默认是靠服务名做DNS解析的,但你想让worker用web.local访问web服务,用hostname指令根本没用——它只是设置容器自身的主机名,不会添加全局的DNS别名;extra_hosts也确实行不通,毕竟web服务的IP是Docker动态分配的,没法预先写死。

正确的解决方案:给web服务添加DNS别名

你只需要在web服务的networks配置里加上aliases字段,把web.local设为它的DNS别名就行。修改后的docker-compose.yml示例如下:

version: '3'
services:
  worker:
    build: ./worker
    networks:
      - mynet
  web:
    build: ./web  # 替换成你实际的build配置
    networks:
      mynet:
        aliases:
          - web.local  # 核心:添加这个别名,让同网络容器能通过web.local解析到web服务
networks:
  mynet:
    driver: bridge  # 自定义网络默认就是bridge驱动,也可省略这行

为什么这个方法有效?

Docker的自定义网络(比如这里的mynet)自带内置的DNS服务器,当你给web服务设置了aliases后,同一网络内的所有容器(比如worker)都会自动识别web.local这个域名,并将其解析到web服务的容器IP——不管Docker怎么动态分配IP,这个解析都会自动生效,完全不用手动维护IP地址。

额外注意事项

  • 确保worker和web服务确实在同一个自定义网络里(默认的bridge网络不支持DNS别名,必须用自己创建的网络);
  • 如果你的web服务需要多个域名解析,可以在aliases里添加多个值,比如- web.local - api.web.local

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

火山引擎 最新活动