Docker Compose启动报错:Address already in use问题排查与解决
问题:Docker Compose启动时提示"Address already in use",端口检查无异常
环境配置文件
docker-compose.yml 内容
name: rideally-zf services: zf-web: build: context: . dockerfile: zfweb.Dockerfile environment: - APPLICATION_ENV=local ports: - '8090:80' volumes: - ./rideallynewDesign:/var/www/html depends_on: - ra-mysql networks: custom_network: ipv4_address: 192.168.200.1 ra-mysql: image: mysql:5.7-debian environment: - MYSQL_ROOT_PASSWORD=rideallyroot - MYSQL_DATABASE=rideally_rideallyin - MYSQL_USER=root - MYSQL_PASSWORD=rideally ports: - '3306:3306' volumes: - mysqlralocal:/var/lib/mysql - ./mysql:/docker-entrypoint-initdb.d/ networks: custom_network: ipv4_address: 192.168.200.2 volumes: mysqlralocal: networks: custom_network: driver: bridge ipam: config: - subnet: 192.168.200.0/24 gateway: 192.168.200.1
zfweb.Dockerfile 内容
FROM php:5.6.40-apache RUN echo "ServerName 192.168.200.1" >> /etc/apache2/apache2.conf RUN a2enmod rewrite && service apache2 restart
执行命令及错误信息
执行docker compose up --build时出现报错:
PS C:\Users\kapil\dev\docker\RA-ZF> docker compose down --rmi all [+] Running 5/5 - Container rideally-zf-zf-web-1 Removed 0.0s - Container rideally-zf-ra-mysql-1 Removed 0.0s - Image rideally-zf-zf-web:latest Removed 0.0s - Image mysql:5.7-debian Removed 0.8s - Network rideally-zf_custom_network Removed 0.2s PS C:\Users\kapil\dev\docker\RA-ZF> docker stop $(docker ps -a -q) 14dcc9ec4ab1 314b1d09eea1 a388c643a3a7 11e1f378af9e c31e64d5eb27 64c9ed6d9b18 0f1e28d9f789 8bb496ae4920 398abe872a8e cbe7e3fc1b1f 1c5930d73610 8ebe7f359a40 0782188fa885 33b8cd078884 5a9e6bef532c d94c188d18d0 1b2af074dfcb e2b82377af74 PS C:\Users\kapil\dev\docker\RA-ZF> netstat -ano | findstr :3306 PS C:\Users\kapil\dev\docker\RA-ZF> netstat -ano | findstr :3366 PS C:\Users\kapil\dev\docker\RA-ZF> netstat -ano | findstr :80 UDP [::]:52066 [2404:6800:4009:809::200a]:443 4940 UDP [::]:54174 [2404:6800:4009:80e::200a]:443 4940 => CACHED [2/3] RUN echo "ServerName 192.168.200.1" >> /etc/apache2/apache2.conf 0.0s => CACHED [3/3] RUN a2enmod rewrite && service apache2 restart 0.0s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:59424d3997e14f7a18ca5e7c6e997e3da7c8788cb372f8b5cec3aec246f6956f 0.0s => => naming to docker.io/library/rideally-zf-zf-web 0.0s Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them [+] Running 3/3 - Network rideally-zf_custom_network Created 0.1s - Container rideally-zf-ra-mysql-1 Created 0.5s - Container rideally-zf-zf-web-1 Created 0.2s Attaching to rideally-zf-ra-mysql-1, rideally-zf-zf-web-1 rideally-zf-ra-mysql-1 | 2023-04-02 09:59:43+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.41-1debian10 started. Error response from daemon: Address already in use PS C:\Users\kapil\dev\docker\RA-ZF>
已尝试停止所有容器、检查端口占用但未发现异常,需排查哪个地址被占用及释放方法。
问题根源
你在docker-compose.yml里存在配置冲突:自定义网络custom_network的网关设置为192.168.200.1,同时又给zf-web容器分配了同一个IP地址。Docker创建自定义网桥时,网关地址是网络的预留地址,不能分配给容器使用,这直接导致了地址占用冲突。
解决步骤
方案1:更换容器固定IP
修改docker-compose.yml,给zf-web容器分配同子网内未被占用的IP,比如192.168.200.3:
zf-web: # 其他配置保持不变 networks: custom_network: ipv4_address: 192.168.200.3
方案2:移除容器固定IP配置
直接删除容器的ipv4_address配置,让Docker自动分配IP:
zf-web: # 其他配置保持不变 networks: - custom_network
ra-mysql的固定IP也可以选择保留(只要不与网关冲突)或同样移除。
重新启动容器
修改配置后执行命令:
docker compose up --build
额外验证(若问题仍存在)
检查本地网卡是否占用了192.168.200.0/24子网的地址:
在Windows上执行:
ipconfig /all
如果有网卡使用该网段的IP,停止对应服务或更换Docker子网配置即可。
内容的提问来源于stack exchange,提问作者Kapil Sharma
相关产品推荐
相关产品推荐

