Search code examples
dockerpercona

Running Percona server in Docker fails with socket error


I've been trying, and failing, to get Percona Server (version 8 on CentOS) running as a lone service inside a docker-compose.yml file. The error that keeps coming up is:

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.

My docker-compose.yml file is as follows:

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

A few things to note:

  1. My my.cnf file, which lives on the host under docker/mysql/conf/, declares the location of the socket file as /var/run/mysql.sock instead of /var/lib/mysql/mysql.sock. Why would mysqld still be trying to use a different socket file path than the one I declared in my own config file? (And yes, my config file IS being picked up because when it used to have deprecated options declared inside it, mysqld complained and failed to start.)
  2. In the beginning, I kept the socket file path setting alone and allowed it to use the default location; however, it resulted in the same exact error.
  3. The documentation at the Percona Docker Hub page contains contradictions, one of the important ones being that they mention the config directory /etc/my.cnf.d inside the container, and then when they give an example they instead mention /etc/mysql/conf.d; the discrepancy makes me lose confidence in the entire rest of the documentation. Indeed, my lack of confidence now seems well-placed, since the official image fails to run properly out of the box.

So, does anyone know how to use the official Percona images? (Or am I going to be forced to roll my own service using my own Dockerfile?)


Solution

  • I was also getting the same error on mac os.

    So getting a hint from error: "File name too long", I moved my entire project into home directory, so that my compose file was at path:~/myproject/docker-compose.yml. (May be you can try moving to root dir, just to avoid any confusion to what ~/ expands to.)

    And it did the trick and mysql image was up again without any error.

    PS: I am not saying that you need to place your project in homedir, but you need to find smallest folder path that works for your project.