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