运行 Docker 中的 Percona 服务器因套接字错误而失败

Running Percona server in Docker fails with socket error

我一直在尝试将 Percona Server(CentOS 上的版本 8)运行作为 docker-compose.yml 文件中的一项单独服务来获取,但一直没有成功。不断出现的错误是:

mysql    | 2020-03-16T23:04:25.189164Z 0 [ERROR] [MY-010270] [Server] Can't start server : Bind on unix socket: File name too long
mysql    | 2020-03-16T23:04:25.189373Z 0 [ERROR] [MY-010258] [Server] Do you already have another mysqld server running on socket: /var/lib/mysql/mysql.sock ?
mysql    | 2020-03-16T23:04:25.190581Z 0 [ERROR] [MY-010119] [Server] Aborting
mysql    | 2020-03-16T23:04:26.438533Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.18-9)  Percona Server (GPL), Release 9, Revision 53e606f.

我的docker-compose.yml文件如下:

version: '3.7'

services:

  mysql:
      container_name: mysql
      image: percona:8-centos
      volumes:
        - ./docker/mysql/setup:/docker-entrypoint-initdb.d
        - ./docker/mysql/data:/var/lib/mysql
        - ./docker/mysql/conf:/etc/mysql/conf.d:ro
      environment:
        - MYSQL_ROOT_PASSWORD=mypassword
        - MYSQL_DATABASE=<redacted>
        - MYSQL_USER=<redacted>
        - MYSQL_PASSWORD=<redacted>
      stop_grace_period: 20s 
      restart: always

注意几点:

  1. 我的 my.cnf 文件位于 docker/mysql/conf/ 下的主机上,将套接字文件的位置声明为 /var/run/mysql.sock 而不是 /var/lib/mysql/mysql.sock。为什么 mysqld 仍会尝试使用与我在自己的配置文件中声明的不同的套接字文件路径? (是的,我的配置文件正在被提取,因为当它曾经在其中声明过时的选项时,mysqld 抱怨并且无法启动。)
  2. 一开始我单独保留socket文件路径设置,让它使用默认位置;但是,它导致了完全相同的错误。
  3. Percona Docker Hub 页面上的文档包含矛盾,其中一个重要的矛盾是他们提到了容器内的配置目录 /etc/my.cnf.d,然后当他们给出示例时,他们改为提及 /etc/mysql/conf.d;这种差异让我对整个文档的其余部分失去了信心。确实,我现在缺乏信心似乎是有道理的,因为官方图片无法 运行 正确地开箱即用。

那么,有人知道如何使用官方 Percona 图像吗?(或者我将被迫使用我自己的 Docker 文件来推出我自己的服务?)

我在 mac os 上也遇到了同样的错误。

因此从错误中得到提示:"File name too long",我将整个项目移至主目录,因此我的 compose 文件位于路径:~/myproject/docker-compose.yml . (也许你可以尝试移动到根目录,只是为了避免混淆 ~/ 扩展到的内容。)

成功了,mysql 图像再次出现,没有任何错误。

PS:我并不是说您需要将您的项目放在 homedir 中,而是您需要找到适合您的项目的最小文件夹路径。