我正在尝试运行一个docker mysql容器,并根据此消息https://stackoverflow.com/a/29150538/6086816中提供的指令初始化db。第一次运行后,它工作正常,但在第二次运行时,在尝试从脚本执行/usr/sbin/mysqld后,我得到这个错误:
db_1| 2016-03- 19 T14:50:14.819377Z 0 [ERROR]另一个pid为10的进程正在使用unix socket文件。
db_1| 2016-03- 19 T14:50:14.819498Z 0 [ERROR]无法设置unix套接字锁定文件。
...
mdir_db_1已退出,代码为% 1
是什么原因呢?
6条答案
按热度按时间fnvucqvd1#
我也面临着同样的问题。以下是我试图解决这个问题的步骤-
运行命令“docker inspect 'your container ID'“。
你会得到一个JSON文件。它是你的docker容器的配置文件。
搜索此JSON文件中的Mounts键。在Mounts中,您将获得卷的名称(哈希)。(您还将在挂载中获得卷的路径。在Mounts中,“Name”键是您的卷名,“Source”是您的卷所在的路径。
**注意-**在docker容器文件夹中,每个命令都使用sudo。
oprakyz72#
在启动mysql之前,你应该确保socket文件已经被删除。检查我的.cnf(
/etc/mysql/my.cnf
)文件,以获得socket文件的路径。找到像这样的socket = /var/run/mysqld/mysqld.sock
。并删除.sock.lock
文件。2cmtqfgy3#
只是面临同样的问题。
经过多次研究,总结了我的解决方案:
1.查找docker文件的主机位置
$ docker inspect <container_name>
--> * 装载源 * 部分在我的例子中,它是 /var/snap/docker/common/.../_data
作为 root,您可以
ls -l
该目录并查看阻止容器启动的文件,即套接字 mysql.sock 和文件 mysql.sock.lock。只需将它们删除为 root(
$ sudo rm /var/snap/.../_data/mysql.sock*
)并启动docker容器。**注意:**确保除了这两个文件之外,您没有任何其他的 * mysql.sock... * 文件。在这种情况下,不要使用wildcar(*),单独删除它们。
希望这能帮上忙。
dfuffjeb4#
我也遇到了同样的问题,并以一种轻松而神秘的方式摆脱了它。
首先,我注意到我无法启动
mysql_container
容器。运行docker logs mysql_container
表明与所述重复几次完全相同的问题。我想通过在一个bash窗口中以交互模式运行
docker start -i mysql_container
容器,同时在另一个窗口中运行docker exec -it mysql_container cat /etc/mysql/my.cnf
之类的东西来查看一下。我已经这样做了,非常惊讶地看到,这一次容器启动成功。我不明白为什么。我只能猜测,启动一个交互模式并运行随后的
docker exec
命令会减慢init进程的速度,而另一个进程有更多的时间来删除它的锁。希望这对大家有帮助。
qzlgjiam5#
这是Docker的一个漏洞。
执行以下命令:
这将停止所有容器并将其删除。
在这之后,它应该工作得很好。
lymgl2op6#
通常,这意味着之前运行的MySQL示例通过文件系统锁定了DB。
如果您确定没有示例正在运行,则可以删除剩余的悬挂锁,并且不会出现冲突错误。
根据shubham tak's answer,您可以通过直接从主机计算机的文件系统中删除这些锁来删除Docker虚拟文件系统上持久化的锁。
或者,您可以使用Docker CLI将其全部删除并重新开始:
然后再试一次。