docker bind for port is already allocated

原创文章
声明:作者声明此文章为原创,未经作者同意,请勿转载,若转载,务必注明本站出处,本平台保留追究侵权法律责任的权利。
全栈老韩
全栈工程师,擅长iOS App开发、前端(vue、react、nuxt、小程序&Taro)开发、Flutter、React Native、后端(midwayjs、golang、express、koa)开发、docker容器、seo优化等。

Error response from daemon: driver failed programming external connectivity on endpoint blog_redis (27b921fbdad1c8a40929a3c16ce61c0623939f12e4c6eddaaac0e9d3ce2c298b): Bind for 0.0.0.0:6379 failed: port is already allocated

从问题报错来看,端口6379已经被其他程序占用了,所以容器的端口绑定失败了,所以解决问题的办法,那就是找出当前占用6379端口的程序,并且kill掉这个进程,让docker可以正常进行端口映射。

一、查看端口号对应的pid

terminal 复制代码
lsof -i tcp:6379


从截图中看,确实有进程509占用了端口6379,而且是之前启动的redis-server在占用,说明docker之前使用后并没有释放掉这个端口监听。

二、kill进程

terminal 复制代码
kill -9 507

执行上述命令后,重新docker restart容器,看是否能解决问题。

三、其他情况

1.如果是桌面端的docker软件,完全可以重新启动来解决。
2.如果是使用docker-compose.yml的场景下,可以先关闭掉所有容器,再使用up试试

terminal 复制代码
docker-compose down
  1. 如果是容器之间的端口互斥,可以查看所有容器绑定的端口号是否有冲突的
terminal 复制代码
docker ps -a
  1. 如果是运行laravel环境,可以尝试以下命令
terminal 复制代码
valet stop

暂无评论,快来发表第一条评论吧