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。
小智 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
刚刚面临同样的问题。
经过多次研究,总结我的解决方案:
查找 docker 文件的主机位置
$ docker inspect <container_name>--> Mounts.Source部分
就我而言,它是/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文件。