gpt4 book ai didi

Docker 容器无法连接到互联网

转载 作者:行者123 更新时间:2023-12-02 18:06:40 26 4
gpt4 key购买 nike

我有一个 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
我尝试了多种方法
  • 安装 resolvconf 并重新启动 docker service docker restart
  • 将主机上的/etc/resolv.conf 更改为指向 google 或 openDNS 服务器。
  • 在/etc/docker/daemon.json 中添加了 DNS 并重新启动了 docker
  • {
    "dns" : ["172.24.100.50", "8.8.8.8"]
    }
  • 将容器内的 DNS 名称服务器从
  • 更改为
    nameserver 127.0.0.11
    options ndots:0
    nameserver 127.0.0.11
    nameserver 172.24.100.50
    nameserver 8.8.8.8
    命令在容器内运行
    /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 $
    发送警报时,警报管理器给出错误:
    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"
    我试图在主机网络上运行警报管理器,但它仍然不起作用
    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
    我尝试了很多选择,但还没有找到解决方案。谁能帮我解决这个问题?如果需要更多详细信息,请告诉我。

    最佳答案

    我能够解决这个问题。事实证明,在用于 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 流量被允许,现在它正在工作。

    关于Docker 容器无法连接到互联网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64078387/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com