关键是在同一自定义bridge网络中运行容器,Docker内置DNS仅在此类网络中生效,支持通过容器名(如ping db)直接通信;默认bridge网络不支持名称解析。
要让 Docker 容器间通过容器名(比如 ping db 或 curl http://web:80)直接通信,关键不是改配置文件,而是让它们处于同一个自定义 bridge 网络中。Docker 内置 DNS 服务只在用户创建的 bridge 网络里生效,原生默认 bridge 网络(bridge)不支持名称解析。
默认的 bridge 网络虽然能让容器互通,但容器之间只能靠 IP 地址访问,无法通过名字自动解析。只有你手动创建的 bridge 网络,Docker 才会启动内置 DNS,并把容器名注册进去。
docker network create mynet
docker run -d --name web --network mynet nginx
docker run -d --name db --network mynet mysql
web 容器里执行 ping db 就能通,无需查 IP所有需要互访的容器,必须使用 完全相同的网络名称(比如都用 mynet),不能一个用 mynet、另一个用 default 或没指定网络。Docker 不会在不同网络之间做 DNS 转发。
docker inspect <容器名> | grep NetworkMode 或看 NetworkSettings.Networks 字段docker network connect mynet <容器名> 动态加入如果你用 docker-compose.yml 启动多个服务,只要不显式指定网络 driver 为 bridge 并禁用 DNS,它默认就会创建一个专属 bridge 网络,并把所有 service 名作为可解析主机名。
services: api: image: my-api db: image: postgresapi 容器里可以直接 ping db 或连接 postgresql://db:5432
如果 ping 不通名字,先别急着改 DNS 配置,按顺序排查这几项:
docker network inspect mynet 查看 Containers 列表)nslookup db 或 getent hosts db,看能否解析出 IP0.0.0.0(不是 127.0.0.1),否则其他容器连不上docker exec db ss -tlnp | grep :5432
Dbeaver导出表结构、数据到另一个数据库图文教程实用指南
tplink2600路由器设置方法(tplink2600路由器如何设置)
前端数据库IndexedDB基础使用的做法步骤实用指南
tplink2600路由器什么芯片(tplink2600路由器芯片推荐)
图文完整指南如何用IDEA和Navicat导入导出数据库
路由器tplink5620和5660哪个好(路由器tplink5620和5660选择推荐)