Docker容器没有网络访问权限

Bri*_*ian 4 dns connectivity docker server ubuntu-22.04

我从 Strato 租了一台 VPS Linux VC4-8 服务器,想在上面部署一些 Docker 容器。不幸的是,部署的容器无法访问互联网或无法解析 DNS。因此,我无法像RUN apk update 构建过程中那样运行命令。

我已经尝试了各种解决方案,但不幸的是没有成功。以下是我已经阅读和尝试过的一些主题:

以下是我的问题的示例,从完全干净的服务器(Ubuntu 22.04)开始:

  1. ping 8.8.8.8ping google.com完美运行(在主机上)

  2. 使用官方说明安装 Docker (使用 apt 存储库安装)

  3. 运行docker pull alpinedocker run --rm -it alpine:latest

  4. 连接到 alpine 容器

    1. PING 8.8.8.8 (8.8.8.8): 56 data bytes
      ^C
      --- 8.8.8.8 ping statistics ---
      30 packets transmitted, 0 packets received, 100% packet loss
      
      Run Code Online (Sandbox Code Playgroud)
    2. / # ping google.com
      ping: bad address 'google.com'
      
      Run Code Online (Sandbox Code Playgroud)

我还在另一台服务器(来自 Hetzner)上尝试了这些步骤,一切正常。
这些文件/etc/resolv.conf在两台服务器上看起来几乎相同。

Strato 服务器上的 resolv.conf:

nameserver 127.0.0.53 
options edns0 trust-ad 
search .
Run Code Online (Sandbox Code Playgroud)

Hetzner 服务器上的 resolv.conf

nameserver 127.0.0.53
options edns0 trust-ad
Run Code Online (Sandbox Code Playgroud)

当我运行时,默认的“桥接”网络看起来完全相同docker inspect bridge
当我比较两台机器的容器时,docker inspect <container name>一切看起来都一样。仅CgroupnsMode属性设置为host运行示例和privateStrato 服务器(但我不确定这是否是连接方面的问题)。

如果我使用该--network host选项启动容器,我可以成功设置容器并从容器内部访问互联网,但之后我的 Django 容器找不到 Postgres 容器。我还认为这不是执行此操作的首选方法。

有谁知道我在 Strato 服务器上使用 Docker 时遇到这些问题的原因是什么?
我真的不知道还能尝试什么。

预先感谢您的任何帮助!

br,布莱恩

小智 5

来自docker论坛:https://forums.docker.com/t/docker-bridge-networking-does-not-work-in-ubuntu-22-04/136326/6

问题是netplan,ubuntu 22.04使用netplan通过DHCP来寻址ip。需要修改文件 /etc/netplan/50-cloud-init.yaml 并在 * 前面添加 en :

network:
    ethernets:
        all:
            dhcp4: true
            dhcp6: true
            match:
                name: 'en*'
    renderer: networkd
    version: 2
Run Code Online (Sandbox Code Playgroud)

这将强制 netplan 仅在接口 en* 上使用 DHCP,并且 docker 接口为 docker0

接下来应用配置并重新启动网络:

netplan apply
sudo systemctl restart systemd-networkd

#Docker need to be restarted to request a new ip
sudo systemctl restart docker
Run Code Online (Sandbox Code Playgroud)

在 ubuntu 22.04 上为我的 Strato V-Server 工作。