#
运维 2026-04-24

Docker user defined Bridge DNS 不自动继承问题

By Leafking 30 Views 6 MIN READ 0 Comments

因为在NAS上自托管了非常多的服务,而其中很多服务都依赖与Docker部署,但是很多服务需要使用代理服务器,于是学习一下docker的网络相关知识。

docker的网络大致是这样的,在docker中的每一个container都会默认分配到自己的本地网络ip,和宿主机器和其他的container是相互之间隔离的

在Linux中,有如下几种网络模式:

DriverDescription
bridgeThe default network driver.
hostRemove network isolation between the container and the Docker host.
noneCompletely isolate a container from the host and other containers.
overlaySwarm Overlay networks connect multiple Docker daemons together.
ipvlanConnect containers to external VLANs.
macvlanContainers appear as devices on the host's network.

在这里介绍最常用的两种:

Bridge

分为用户自定义(user defined) 和 默认 (default) 两种bridge,一般用户自定义的bridge更加灵活,使用自定义bridge可以使得各个相互独立的容器之间可以通过内部的ip相互访问(是不需要暴露端口的)

Untitled Diagram.drawio.png

AI总结的区别:

特性默认 bridge 网络用户自定义 bridge 网络
DNS服务发现不支持。容器间只能通过IP地址通信,但容器的IP可能会变化,导致连接不稳定。支持。容器间可以直接用容器名称(如 db)或网络别名通信,由Docker内置DNS自动解析。
连接与断开不灵活。容器一旦创建,网络即固定。要更换网络,必须停止、删除容器后,用新参数重建。非常灵活。可以在容器运行期间,随时使用命令动态地连接或断开网络。
隔离性较弱。所有未指定网络的容器都默认加入此网络,无关的服务间存在意外通信的风险。。每个用户网络都是独立的隔离环境,只有连接到同一个自定义网络的容器才能互相通信。
端口映射需显式使用 -p 暴露端口。同一网络内的容器默认互通所有端口;如需对外暴露,仍可用-p

Host

容器和宿主之间共享网络空间命名空间,也就是容器没有自己的ip,容器的本地地址就是127.0.0.1,当然这会遇到很多问题,虽然有沙盒的隔离性但是对于端口管理上可能会出现冲突。

Untitled Diagram.drawio (1).png

MyQuestion

实际配置的时候遇到了一个非常离谱的问题:在配置本地服务的时候DNS不会自动继承宿主机的dns服务器配置。

问题具体如下:

配置了一个docker服务,包含了frontend, backend, db, 和 redies 服务这几个服务通过 user defined bridge相互访问,而服务需要使用代理网络从国外的服务器api获取信息。

发现宿主机器可以访问代理服务器,可是容器内无法访问服务器,但是我的服务器是通过ip地址访问的,按理来说是不会触发DNS,但是经过查询有的时候ip地址也会自动强制触发DNS,需要配置DNS服务器。检查过后确实容器内没有自动继承宿主机的DNS服务器配置,需要在Docker-compose的配置中添加dns服务器:

dns:
  - 8.8.8.8
  - 114.114.114.114

随后在代理服务器的后台看到了连接消息问题解决。

这个问题确实挺烦人的但是学到了

本文由 Leafking 原创

采用 CC BY-NC-SA 4.0 协议进行许可

转载请注明出处:http://blog.leafkingofficial.top/index.php/archives/14/

TAGS: Docker

相关推荐

  • 暂无相关推荐,看看别的吧。

0 评论

发表评论