Docker启动容器启动并映射端口号时报错:Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use.
1、错误信息如下
[root@iZf8z14idfp0rxiag38b06Z ~]# docker run -dp 3306:3306 dd7265748b5d
92e2b8a88f005750c7667330f44e1f7bee7580a1d45ef25f00912a9aec434171
/usr/bin/docker-current: Error response from daemon: driver failed programming external connectivity on endpoint eager_stallman (ecffeb996a5711a832e67f44771d2d3505a0b01313b260344483546319070fd0): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use.
2、问题分析
错误摘要:Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use.
翻译:启动userland代理时出错:监听tcp 0.0.0.0:3306: bind: address已经在使用中。
原因:是因为3306这个端口已被占用才导致上述问题,3306一般都是MySQL的端口号,所以~原因就找到啦!!!
3、解决步骤
- 查询进程3306,命令:
ps -ef|grep 3306
[root@iZf8z14idfp0rxiag38b06Z ~]# ps -ef|grep 3306
mysql 1824 998 0 17:15 ? 00:00:00 /www/server/mysql/bin/mysqld --basedir=/www/server/mysql --datadir=/www/server/data --plugin-dir=/www/server/mysql/lib/plugin --user=mysql --sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION --log-error=iZf8z14idfp0rxiag38b06Z.err --open-files-limit=65535 --pid-file=/www/server/data/iZf8z14idfp0rxiag38b06Z.pid --socket=/tmp/mysql.sock --port=3306
root 2919 1960 0 18:01 pts/0 00:00:00 grep --color=auto 3306
会发现确实是MySQL服务占用着端口号,那么接下来只需要关闭MySQL服务就行啦!!!
2. 关闭MySQL服务:service mysql stop
、kill -9 1824
4. 查看3306进程是否还存在:ps -ef|grep 3306
[root@iZf8z14idfp0rxiag38b06Z ~]# ps -ef|grep 3306
root 2999 1960 0 18:14 pts/0 00:00:00 grep --color=auto 3306
行了,MySQL服务以及关闭了,可以重新启动容器了
小提示:如果启动的容器是mysql,那么请一定记得要加上密码!!
小示例:docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest