Docker默认桥接网络中容器如何通过别名或名称实现互访?
在Docker默认桥接网络中通过容器名称/别名实现互访的方法
嘿,这个问题其实Docker默认桥接网络已经帮我们搞定了核心的DNS解析能力,不用额外搞复杂的配置~我给你分享几种简单直接的实现方式:
直接使用容器名称访问
Docker的默认桥接网络(就是你说的network_mode: bridge对应的那个)内置了DNS服务,会自动把容器名称映射到它的内网IP。你只需要在创建容器的时候给它指定一个明确的名称就行:docker run --name web-container nginx docker run --name api-container node这时候在api-container里要访问web-container,直接用
web-container这个名称代替IP就行,比如执行curl web-container就能拿到nginx的默认页面,完全不用记172.17.0.X这种随机IP。用自定义别名访问(更灵活)
如果不想暴露容器的真实名称,或者需要给同一个容器设置多个访问标识,可以用--network-alias参数添加别名:docker run --name mysql-db --network-alias db --network-alias prod-mysql mysql:8这样其他容器既可以用
mysql-db(真实名称)访问,也可以用db或者prod-mysql这两个别名来访问,适配不同的业务场景更方便。快速验证解析是否生效
你可以随便进入一个容器,用ping或者curl测试一下:docker exec -it api-container ping web-container # 或者测试别名 docker exec -it api-container ping db能正常ping通的话,就说明DNS解析已经工作了,后续业务代码里直接用这些名称/别名就行。
补充个小提醒:所有要互访的容器必须都在同一个默认桥接网络里(也就是没手动指定其他自定义网络的容器),这个前提满足的话,上面的方法都能直接用。
内容的提问来源于stack exchange,提问作者Jumpa
相关产品推荐
相关产品推荐

