我的 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>
一旦确保地址/端口可以自由使用,即可重试。