docker - Docker 无法访问 .local 域
问题描述
我正在尝试使用 .local 域访问我的网络上的设备,但它似乎在 Docker 中不起作用。
来自主机的 Ping 工作正常:
$ ping test1.local
PING test1.local (192.168.1.90) 56(84) bytes of data.
64 bytes from 192.168.1.90 (192.168.1.90): icmp_seq=1 ttl=255 time=1.41 ms
64 bytes from 192.168.1.90 (192.168.1.90): icmp_seq=2 ttl=255 time=1.54 ms
Docker 恶魔配置:
$ cat /etc/docker/daemon.json
{
"dns": ["192.168.1.1","8.8.8.8"]
}
如果我尝试从 Docker ping test1.local:
$ sudo docker run --network host busybox ping -c 3 test1.local
ping: bad address 'test1.local'
使用 IP ping 设备工作:
$ sudo docker run --network host busybox ping -c 3 192.168.1.90
PING 192.168.1.90 (192.168.1.90): 56 data bytes
64 bytes from 192.168.1.90: seq=0 ttl=255 time=4.855 ms
64 bytes from 192.168.1.90: seq=1 ttl=255 time=1.566 ms
所以我认为有些东西是错误的名称解析。
madrian@ubuntudev:~$ cat /etc/resolv.conf
$ cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.
nameserver 127.0.0.1
search localdomain
任何想法如何解决这个问题?
解决方案
尝试在没有 --network host
参数的情况下运行您的代码。问题在于 DNS 解析。
当您使用时default bridge
(如果您省略参数将使用network
),容器从主机继承 DNS 配置,这就是您所需要的:
https ://docs.docker.com/v17.09/engine/userguide/networking/default_network/配置-dns/
当您使用 时user-defined bridge
,Docker 会更新 DNS 记录,以便通过容器名称实现容器之间的无缝通信:
https ://docs.docker.com/v17.09/engine/userguide/networking/configure-dns/
不幸的是,我无法找到关于 DNS 如何与host
模式一起工作的明确解释,所以我认为这是一个问题
推荐阅读
- python - 如何解决问题“检查输入时出错:预期 flatten_7_input 的形状为 (28, 28) 但数组的形状为 (28, 3)”
- c++ - C++ 悬空指针和内存泄漏
- django - 如何向序列化程序发送额外的参数,不包含在模型中?
- reactjs - Reactstrap - 图像右侧的轮播标题
- node.js - AWS Lightsail 和 EC2 G3 是否兼容导出图像?
- c++ - 可以使用 std::copy 将 3D 数组复制到向量。
- python - 如何计算标签/工具提示的聚合聚合?
- regex - 删除部分 URL 并重定向到网站的特定页面
- sabre - Sabre预订中的国际/国内航班指示
- ios - 以编程方式设置 UITableView 行选择返回 nil