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

时间:2016-03-19 15:44:04

标签: mysql sockets docker

我正在尝试使用此消息https://stackoverflow.com/a/29150538/6086816中提供的初始化数据库运行一个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退出

它可能是什么原因?

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这是docker的一个小问题。

执行以下命令:

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

这将停止所有容器并将其删除。

此后它应该可以正常工作。

答案 2 :(得分:0)

我遇到了同样的问题。以下是我尝试解决此问题的步骤 -

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

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

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

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

<块引用>

运行命令“docker inspect '您的容器 ID'”。

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

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

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

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

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

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