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

Posted

技术标签:

【中文标题】Docker 数据库容器正在运行。另一个带有 pid <id> 的进程正在使用 unix 套接字文件【英文标题】:Docker db container running. Another process with pid <id> is using unix socket file 【发布时间】:2016-07-06 08:23:05 【问题描述】:

我正在尝试根据此消息https://***.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 退出

这可能是什么原因?

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,并以一种简单而神秘的方式解决了它。

首先我注意到我无法启动mysql_container 容器。运行docker logs mysql_container 表明与重复几次所描述的完全相同的问题。

我想通过docker start -i mysql_container 从一个 bash 窗口以交互模式运行容器,同时运行诸如 docker exec -it mysql_container cat /etc/mysql/my.cnf 在另一个。

我已经这样做了,并且很惊讶地看到这次容器成功启动了。我不明白为什么。我只能猜测启动交互模式和运行后续的docker exec 命令会减慢 init 进程的速度,而另一个进程有更多时间来解除锁定。

希望对任何人都有帮助。

【讨论】:

【参考方案2】:

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

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

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

然后在 docker 文件夹中,您需要进入 volumes 文件夹。此文件夹包含所有容器的卷(每个容器的内存) - 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。

【讨论】:

【参考方案3】:

这是 docker 的一个小故障。

执行以下命令:

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

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

在这之后它应该可以正常工作了。

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于Docker 数据库容器正在运行。另一个带有 pid <id> 的进程正在使用 unix 套接字文件的主要内容,如果未能解决你的问题,请参考以下文章

将 docker 容器中运行的 JavaScript 连接到另一个 docker 容器上运行的 MySQL 数据库

如何从另一个容器访问在 Docker 容器中运行的 Mopidy

Spring Boot + MySQL docker 容器

在 Raspberry Pi 上使用 open62541 服务器运行 docker 容器

操作docker容器

04-使用docker容器