【问题标题】:Docker: Error response from daemon: Bind for 0.0.0.0:3306 failed: port is already allocatedDocker:来自守护进程的错误响应:绑定 0.0.0.0:3306 失败:端口已分配
【发布时间】:2018-07-19 00:03:27
【问题描述】:

我是 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 3306,但这会将0.0.0.0:32769->3306/tcp 显示为docker ps 中的端口。

我希望得到一些帮助。提前致谢。

【问题讨论】:

    标签: mysql shell docker web mariadb


    【解决方案1】:

    使用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

    【讨论】:

    • 检查docker ps。是否有任何其他 docker 容器之前开始持有港口?
    • 我今天才开始使用它。 docker psdocker ps -a 都是空的。
    • 我确实在我的机器上安装了 MySQL,并且在系统首选项中它确实显示了正在运行的服务器。我现在把它关掉了,并创建了一个新图像。但现在它不会运行容器。调查它...
    • lsof怎么没抓到?
    • 成功了!我自己修好了,但你确实把我送到了正确的方向,谢谢。我对 lsof 一无所知。
    猜你喜欢
    • 1970-01-01
    • 2018-02-20
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 2020-01-11
    相关资源
    最近更新 更多