- 1. 问题所示
- 2. 分析原理
- 3. 解决方法
出现如下问题
(base) gaokaoli@kkjz-ThinkStation-P330:~$ sudo docker start 4438 Error response from daemon: driver failed programming external connectivity on endpoint mysql (d8e2492b2eaef4bfe5e4a64bad7c8cb27d8fb4cc03afb1fd4b85183769e498ae): Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use Error: failed to start containers: 4438
代码截图如下:
关于前半部分的原因,主要原因可看我这部分的文章:
docker出现Error response from daemon: driver failed programming external connectivity on endpoint解决方法
对于下半部分的原因:Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use
分析其原理主要为3306端口被占用了,所以要kill 3306端口的pid进程号即可或者关闭mysql服务即可
需要按照顺序进行执行:
- 执行systemctl restart docker,关于为何执行这个,可看我上面完整的分析
- 重启以下docker容器systemctl restart docker
- 查看端口号的占用pid进程号 ps -ef|grep 3306
执行步骤:
(base) gaokaoli@kkjz-ThinkStation-P330:~$ ps -ef|grep 3306 gaokaoli 957833 859945 0 21:17 pts/0 00:00:00 grep --color=auto 3306
代码截图:
再次执行上面这个命令,发现其pid进程号会改变,所以不能使用kill -9 pid进程号,如果发现进程号不会改变,则可以执行kill命令
- 如果pid进程号改变,则执行如下命令service mysql stop
(base) gaokaoli@kkjz-ThinkStation-P330:~$ service mysql stop ==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units === 停止“mysql.service”需要认证。 Authenticating as: kkjz,,, (kkjz) Password: ==== AUTHENTICATION COMPLETE ===
这条命令只是关闭mysql,但是3306的端口号并没有被关闭
如图所示:(而且其进程号一直改变,无法kill)
- 接下来就可启动docker容器了,如果已经有容器,则直接start,如果没有则需run下
(base) gaokaoli@kkjz-ThinkStation-P330:~$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4438b7f37917 mysql:5.7 "docker-entrypoint.s…" 2 hours ago Exited (128) 22 minutes ago mysql de4e3ddc6f6c rabbitmq "docker-entrypoint.s…" 3 months ago Exited (0) 6 weeks ago rabbit (base) gaokaoli@kkjz-ThinkStation-P330:~$ sudo docker start 4438 4438 (base) gaokaoli@kkjz-ThinkStation-P330:~$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4438b7f37917 mysql:5.7 "docker-entrypoint.s…" 2 hours ago Up 8 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql (base) gaokaoli@kkjz-ThinkStation-P330:~$ ps -ef|grep 3306 root 958022 957542 0 21:18 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 3306 -container-ip 172.17.0.2 -container-port 3306 root 958028 957542 0 21:18 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 3306 -container-ip 172.17.0.2 -container-port 3306 gaokaoli 958187 859945 0 21:19 pts/0 00:00:00 grep --color=auto 3306
截图如下:
执行到这里问题已经解决了
如果还是不行的话,底下评论区留言即可



