Docker:来自守护进程的错误响应:绑定0.0.0.0:3306失败:端口已经分配

时间:2018-02-08 12:08:00

标签: mysql shell docker web mariadb

我是Docker的新手,我似乎无法让我的mariadb容器运行。我刚刚在运行High Sierra的Macbook Pro上安装了Docker。

我已经简单地使用了这个命令:

docker run --name db -e MYSQL_ROOT_PASSWORD=test -d -p 3306:3306 
mariadb

应该创建一个图像并从中运行容器。但是我收到以下错误:

docker: Error response from daemon: driver failed programming 
external connectivity on endpoint db 
(d4d6631ae53d644b5c28a803d5814a792c7af6925ebcf84b61b49b4a0fe30f4b): 
Error starting userland proxy: Bind for 0.0.0.0:3306 failed: port is 
already allocated.

到目前为止,我可能在过去使用过MySQL,但我很确定我没有在3306端口上运行任何东西。

我还尝试过不添加-p标记,它会在我使用它时运行,但是当我执行docker ps时,它会显示3306/tcp而不是0.0.0.0:3306->3306/tcp作为PORT。< / p>

我还尝试将标记移至-p 3306,但这会在0.0.0.0:32769->3306/tcp中将docker ps显示为PORT。

我会喜欢一些帮助。提前谢谢。

1 个答案:

答案 0 :(得分:3)

使用lsof命令检查服务/进程是否正在使用端口3306

$ lsof -i tcp:3306
COMMAND PID     USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
mysqld  721 krisnik   34u  IPv4 0x348c24a60c9d72a9      0t0  TCP localhost:mysql (LISTEN)

现在杀死/停止服务。

kill -9 <PID>

重新运行Docker容器。它应该在释放所需端口时正常工作。

编辑 - 1

如果lsof没有捕捉到该过程,也可以使用netstat

sudo netstat -lpn |grep :3306

kill -9 PID //PID processID used by 3306 Port

参考 - Port 3306 busy but no process using it