Docker 数据库容器正在运行。另一个带有 pid <id> 的进程正在使用 unix 套接字文件

Arn*_*den 20 mysql sockets docker

我正在尝试根据此消息/sf/answers/2040537691/中提供的指令运行带有初始化数据库的 docker mysql 容器。第一次运行后工作正常,但在第二次运行时,尝试从脚本执行 /usr/sbin/mysqld 后,出现此错误:

db_1 | 2016-03-19T14:50:14.819377Z 0 [错误] pid 10 的另一个进程正在使用 unix 套接字文件。

db_1 | 2016-03-19T14:50:14.819498Z 0 [错误] 无法设置 unix 套接字锁定文件。

...

mdir_db_1 退出,代码为 1

这可能是什么原因?

小智 27

我通过执行以下命令解决了这个问题:

docker-compose down --volumes

进而:

sail up --build

https://rawbinn.com/blog/mysql-not-starting-on-docker


shu*_*tak 19

我面临着同样的问题。以下是我尝试解决此问题的步骤 -

  • 首先,使用以下命令停止 docker 服务 - “sudo service docker stop”

  • 现在,使用以下路径进入 Linux 系统中的 docker 文件夹 - /var/lib/docker。

  • 然后在 docker 文件夹中,您需要进入volumes 文件夹。该文件夹包含所有容器的卷(每个容器的内存) - cd /volumes

  • 进入卷后,执行“sudo ls”,您将发现多个带有哈希名称的文件夹。这些文件夹是容器的卷。每个文件夹都以其哈希值命名(您需要检查您的 docker 容器并获取容器卷的哈希值。为此,您需要执行以下步骤 -

运行命令“docker检查‘你的容器ID ’”。

现在您将获得一个 JSON 文件。它是 docker 容器的配置文件。

在此 JSON 文件中搜索 Mounts 键。在装载中,您将获得卷的名称(哈希)。(您还将获得挂载中卷的路径。在挂载中,“名称”键是您的卷名称,“源”是您的卷所在的路径。))。

  • 获得卷的名称后,您可以进入卷文件夹,在此文件夹中您将找到“_data”文件夹。进入这个文件夹。

  • 最后在“_data”文件夹中使用 sudo ls 命令,您将找到一个名为 mysql.sock.lock 的文件夹。通过“rm -f mysql.sock.lock”删除该文件夹。

  • 现在重新启动 docker 服务,然后启动 docker 容器。它将开始工作。

注意 -当您位于 docker 容器文件夹中时,请在每个命令中使用 sudo。

  • 快速注意:如果文件夹 /var/lib/docker 不存在,并且您使用 docker 桌面。您可以在 docker 桌面菜单中访问卷的数据文件夹。卷 → 单击“卷名称”→ 选择“数据”选项卡。在这里删除“mysql.sock.lock” (2认同)

小智 17

感谢 halcyon 评论:

\n

如果你使用docker桌面。在菜单 \xe2\x86\x92“卷”\xe2\x86\x92 中单击卷名称 \xe2\x86\x92 选择“数据”选项卡。这里删除 \xe2\x80\x9cmysql.sock.lock\xe2\x80\x9d\n现在 mysql 可以工作了。

\n


小智 6

刚刚面临同样的问题。

经过多次研究,总结我的解决方案:

  1. 查找 docker 文件的主机位置

    $ docker inspect <container_name>--> Mounts.Source部分

docker 检查的有趣部分

就我而言,它是/var/snap/docker/common/.../_data

作为root,您可以ls -l在该目录中查看阻止容器启动的文件、套接字mysql.sock和文件mysql.sock.lock

在此输入图像描述

只需以root ( )身份删除它们$ sudo rm /var/snap/.../_data/mysql.sock*并启动 docker 容器即可。

注意:确保除了这两个文件之外,您没有任何其他mysql.sock...文件。在这种情况下,不要使用通配符 (*),而是单独删除它们。

希望这可以帮助。


小智 5

在启动mysql之前,应确保socket文件已被删除。检查my.cnf( /etc/mysql/my.cnf)文件以获取socket文件的路径。找到这样的东西socket = /var/run/mysqld/mysqld.sock。并删除该.sock.lock文件。