the*_*xed 7 dns containers docker digital-ocean
我有一个 docker compose 文件,它启动了几个容器,包括 prometheus、alertmanager 和 grafana。这些容器无法连接到互联网。我尝试了多种解决方案,但都无济于事。我在 digitalocean ubuntu Droplet 上。
我的 docker-compose 文件:
version: '3'
services:
prometheus:
image: prom/prometheus:v2.20.1
container_name: prometheus
ports:
- 9090:9090
volumes:
- /data/prometheus:/prometheus
- ./prometheus/:/etc/prometheus/
restart: always
alertmanager:
image: prom/alertmanager:v0.21.0
container_name: alertmanager
ports:
- 9093:9093
- 6783:6783
command:
- '--log.level=debug'
- '--config.file=/etc/alertmanager/alertmanager_config.yml'
- '--storage.path=/alertmanager'
volumes:
- ./alertmanager:/etc/alertmanager
- /data/alertmanager:/alertmanager
restart: always
grafana:
image: grafana/grafana:7.1.5
container_name: grafana
ports:
- 3000:3000
volumes:
- ./grafana.ini:/etc/grafana/grafana.ini
restart: always
Run Code Online (Sandbox Code Playgroud)
我尝试了多种方法
service docker restart{
"dns" : ["172.24.100.50", "8.8.8.8"]
}
Run Code Online (Sandbox Code Playgroud)
nameserver 127.0.0.11
options ndots:0
Run Code Online (Sandbox Code Playgroud)
到
nameserver 127.0.0.11
nameserver 172.24.100.50
nameserver 8.8.8.8
Run Code Online (Sandbox Code Playgroud)
命令在容器内运行
/alertmanager $ wget http://curl.haxx.se/download/curl-7.36.0.tar.gz
wget: bad address 'curl.haxx.se'
/alertmanager $ nslookup google.com
;; connection timed out; no servers could be reached
/alertmanager $
Run Code Online (Sandbox Code Playgroud)
发送警报时,警报管理器给出错误:
lookup api.<my website>.com on 172.24.100.50:53: read udp 172.18.0.5:44178->172.24.100.50:53: i/o timeout"
Run Code Online (Sandbox Code Playgroud)
我试图在主机网络上运行警报管理器,但它仍然不起作用
docker run --net host -d prom/alertmanager:v0.21.0
docker exec -it <container_id> sh
/alertmanager $ cat /etc/resolv.conf
nameserver 172.24.100.50
nameserver 8.8.8.8
/alertmanager $ ls
/alertmanager $ wget http://curl.haxx.se/download/curl-7.36.0.tar.gz
wget: bad address 'curl.haxx.se'
/alertmanager $ set vc
/alertmanager $ nslookup google.com
;; connection timed out; no servers could be reached
Run Code Online (Sandbox Code Playgroud)
我尝试了很多选择,但还没有找到解决方案。谁能帮我解决这个问题?如果需要更多详细信息,请告诉我。
我能够解决这个问题。事实证明,在 Droplet 的 digitalocean 防火墙中,UDP 的出站流量被阻止。仅允许 TCP 流量。因此 dns 解析不起作用。
DNS uses TCP for Zone transfer and UDP for name queries either regular (primary) or reverse. UDP can be used to exchange small information whereas TCP must be used to exchange information larger than 512 bytes.
DNS 需要端口 53 进行名称解析,从 docker 日志中可以看到端口 53 正在使用,但由于 udp 出站流量被阻止,因此 dns 无法工作。
但是,我确实尝试通过设置 dns_opt=use-vc 设置来强制 docker 使用 TCP。这不起作用。UDP 流量已被允许,现在可以正常工作。
| 归档时间: |
|
| 查看次数: |
2160 次 |
| 最近记录: |