Docker 在执行 docker restart 命令后提示“地址已被使用”

Docker 在执行 docker restart 命令后提示“地址已被使用”

我的 docker 容器出现了一个奇怪的问题。docker 守护进程首次启动时一切正常,但当要求 docker 重新启动容器时,它会抱怨地址已被使用,尽管容器一秒钟前才刚刚运行。此容器将无法启动。

root@server:~# docker restart pihole
Error response from daemon: Cannot restart container pihole: Address already in use

容器是从以下 docker-compose 创建的。我确实想在那里托管 DNS,因此我对网络接口应接收的 IP 地址进行了硬编码。

version: "2"

services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    environment:
      TZ: 'Europe/Berlin'
      WEBPASSWORD: '**********'
      ServerIP: '192.168.178.16'
    volumes:
      - 'config:/etc/pihole'
      - 'dnsmasq:/etc/dnsmasq.d'
    networks:
      macvlan:
        ipv4_address: 192.168.178.16
        ipv6_address: fe80::10
    cap_add:
      - NET_ADMIN 
    restart: unless-stopped

networks:
  macvlan:
    external:
      name: macvlan-bond0

volumes:
  config:
  dnsmasq:

网络 macvlan-bond0 是一个批量标准 macvlan 网络,其 IPv4 子网和网关与 DHCP 分发的相匹配,但具有不同的 IPRange,以避免该网络上的容器和成熟主机之间发生 IP 冲突。

root@server:~# docker network inspect macvlan-bond0
[
    {
        "Name": "macvlan-bond0",
        "Id": "322a33ac3db4dcaa286f1ca0369b1a50aac36c09a13ed7768d580daadb07db2b",
        "Created": "2022-08-30T11:16:30.144206169+01:00",
        "Scope": "local",
        "Driver": "macvlan",
        "EnableIPv6": true,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.178.0/24",
                    "IPRange": "192.168.178.32/28",
                    "Gateway": "192.168.178.1"
                },
                {
                    "Subnet": "fe80::/64",
                    "Gateway": "fe80::1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "7f71c160e8bd6d163f8fdc888c6a1355bbdd3bfab5e97d69b945c652b0d9c0e3": {
                "Name": "hass",
                "EndpointID": "8e2e911902caa928dfd5be8d476ca22bd65a3c92e2c1583893b7c9259c2224d1",
                "MacAddress": "02:42:c0:a8:b2:11",
                "IPv4Address": "192.168.178.17/24",
                "IPv6Address": "fe80::2/64"
            }
        },
        "Options": {
            "parent": "bond0"
        },
        "Labels": {}
    }
]

重新启动它的唯一方法是删除网络,重新创建它并再次将容器连接到它。或者完全重新启动docker守护进程。你可以想象,这两种方法都不是理想的。

我在这里做错什么了吗?

在 Ubuntu 18.04.6 LTS 上运行以下 docker build:

root@server:~# docker --version
Docker version 20.10.17, build 100c701

答案1

检查谁在使用相同的地址/端口

netstat -anlop|grep <address/port>

删除容器/进程

docker rm docker_name
or
kill -9 <pid>

一旦确保地址/端口可以自由使用,即可重试。

相关内容