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

Dir*_*nne 2 mysql shell mariadb web docker

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

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

docker run --name db -e MYSQL_ROOT_PASSWORD=test -d -p 3306:3306 
mariadb
Run Code Online (Sandbox Code Playgroud)

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

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.
Run Code Online (Sandbox Code Playgroud)

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

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

我也试过只需要端口标签 as-p 3306但这将显示0.0.0.0:32769->3306/tcp为docker ps.

我很想得到一些帮助。提前致谢。

kri*_*nik 5

使用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)
Run Code Online (Sandbox Code Playgroud)

现在终止/停止服务。

kill -9 <PID>
Run Code Online (Sandbox Code Playgroud)

重新运行您的 Docker 容器。随着所需的端口被释放,它应该可以正常工作。

编辑 - 1

如果lsof没有赶上进程,netstat也可以使用。

sudo netstat -lpn |grep :3306

kill -9 PID //PID processID used by 3306 Port
Run Code Online (Sandbox Code Playgroud)

Ref -端口 3306 繁忙但没有进程使用它