skip to Main Content

I am trying to set up a Laravel development environment on my local machine, but my MySQL container keeps on restarting.

Using: Windows 10 Home with WSL2 and Docker Desktop

docker-compose.yml

version: '3'

networks:
    laravel:

services:

    web:
        image: nginx:stable-alpine
        container_name: nginx
        ports:
            - "80:80"
        volumes:
            - ./src:/var/www/html
            - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
        depends_on:
            - phpfpm
            - db
        networks:
            - laravel


    db:
        image: mysql:8.0.22
        container_name: mysql
        restart: always
        volumes:
            - ./mysql:/var/lib/mysql
        environment:
            MYSQL_DATABASE: mydb
            MYSQL_USER: root
            MYSQL_PASSWORD: root
            MYSQL_ROOT_PASSWORD: root
        networks:
            - laravel


    phpfpm:
        build:
            context: .
            dockerfile: Dockerfile
        container_name: phpfpm
        volumes:
            - ./src:/var/www/html
        ports:
            - "9000:9000"
        networks:
            - laravel


    phpmyadmin:
        image: phpmyadmin:5-fpm-alpine
        container_name: phpmyadmin
        restart: always
        ports:
            - 8080:80
        environment:
            - PMA_ARBITRARY=1
        networks:
            - laravel

Dockerfile

FROM php:7.2-fpm-alpine

RUN docker-php-ext-install pdo pdo_mysql

Nginx (default.conf)

server {
    listen 80;
    index index.php index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/html/laravelapp/public;
    location ~ .php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        # Source: https://serverfault.com/questions/935096/docker-nginx-php-fpm-error-emerg-11-host-not-found-in-upstream
        resolver 127.0.0.11; # docker's internal fixed IP address
        set $upstream phpfpm:9000;
        # nginx will now start if host is not reachable
        fastcgi_pass $upstream; 
        # Source End
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    location / {
        try_files $uri $uri/ /index.php?$query_string;
        # gzip_static on;
    }
}

docker-compose ps or docker deskop shows that mysql container status as restarting.

It restarts once in a while, but stops again. It seems like something is terribly wrong when I look at the log file, but I couldn’t make sense.

mysql container log

2020-11-07 17:09:27+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.22-1debian10 started.

2020-11-07 17:09:28+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'

2020-11-07 17:09:28+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.22-1debian10 started.

2020-11-07T17:09:28.627271Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.22) starting as process 1

2020-11-07T17:09:28.634780Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive

2020-11-07T17:09:28.654292Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.

2020-11-07T17:09:30.967703Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.

mysqld: Table 'mysql.plugin' doesn't exist

2020-11-07T17:09:31.108803Z 0 [ERROR] [MY-010735] [Server] Could not open the mysql.plugin table. Please perform the MySQL upgrade procedure.

2020-11-07T17:09:31.187838Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock

2020-11-07T17:09:31.251299Z 0 [Warning] [MY-010015] [Repl] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.

2020-11-07T17:09:31.304178Z 0 [Warning] [MY-000054] [Server] World-writable config file './auto.cnf' is ignored.

2020-11-07T17:09:31.305509Z 0 [Warning] [MY-010107] [Server] World-writable config file './auto.cnf' has been removed.

2020-11-07T17:09:31.306123Z 0 [Warning] [MY-010075] [Server] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 00514c52-211c-11eb-bbbd-0242ac170002.

2020-11-07T17:09:31.415490Z 0 [Warning] [MY-010015] [Repl] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.

2020-11-07T17:09:31.439838Z 0 [Warning] [MY-013595] [Server] Failed to initialize TLS for channel: mysql_main. See below for the description of exact issue.

2020-11-07T17:09:31.440013Z 0 [Warning] [MY-010069] [Server] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key

2020-11-07T17:09:31.444031Z 0 [Warning] [MY-010284] [Server] RSA public key file not found: /var/lib/mysql//public_key.pem. Some authentication plugins will not work.

2020-11-07T17:09:31.445904Z 0 [Warning] [MY-010284] [Server] RSA public key file not found: /var/lib/mysql//public_key.pem. Some authentication plugins will not work.

2020-11-07T17:09:31.520973Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/var/run/mysqld' in the path is accessible to all OS users. Consider choosing a different directory.

2020-11-07T17:09:31.521733Z 0 [Warning] [MY-010441] [Server] Failed to open optimizer cost constant tables

2020-11-07T17:09:31.522162Z 0 [ERROR] [MY-013129] [Server] A message intended for a client cannot be sent there as no client-session is attached. Therefore, we're sending the information to the error-log instead: MY-001146 - Table 'mysql.component' doesn't exist

2020-11-07T17:09:31.522393Z 0 [Warning] [MY-013129] [Server] A message intended for a client cannot be sent there as no client-session is attached. Therefore, we're sending the information to the error-log instead: MY-003543 - The mysql.component table is missing or has an incorrect definition.

2020-11-07T17:09:31.523156Z 0 [ERROR] [MY-010326] [Server] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist

2020-11-07T17:09:31.523377Z 0 [ERROR] [MY-010952] [Server] The privilege system failed to initialize correctly. For complete instructions on how to upgrade MySQL to a new version please see the 'Upgrading MySQL' section from the MySQL manual.

2020-11-07T17:09:31.523987Z 0 [ERROR] [MY-010119] [Server] Aborting

2020-11-07T17:09:32.995214Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.22) MySQL Community Server - GPL.

2

Answers


  1. Chosen as BEST ANSWER

    Instead of mapped volumes for data persistence, I used the managed volume and it is not crashing anymore

    Previous

    db:
            image: mysql:8.0.22
            container_name: mysql
            restart: always
            volumes:
                - ./mysql:/var/lib/mysql
            environment:
                MYSQL_DATABASE: mydb
                MYSQL_USER: root
                MYSQL_PASSWORD: root
                MYSQL_ROOT_PASSWORD: root
            networks:
                - laravel
    

    Now

    db:
            image: mysql:8.0.22
            container_name: mysql
            restart: always
            volumes:
                - db_data:/var/lib/mysql
            environment:
                MYSQL_DATABASE: mydb
                MYSQL_USER: root
                MYSQL_PASSWORD: root
                MYSQL_ROOT_PASSWORD: root
            networks:
                - laravel
    
    volumes:
        db_data: {}
    

  2. I posted that question when I was starting with docker… After some research, I found out that the main culprit is that the different Linux distro used different user id for the same user name. So basically the permissions problem.

    Please read this article if that makes sense to you… https://medium.com/swlh/wordpress-deployment-with-nginx-php-fpm-and-mariadb-using-docker-compose-55f59e5c1a

    I have to remove the current user from ubuntu and add the user that matches the alpine user. That’s the distro I was using at that time.

    Probably that’s the gotcha I think… if you are using ubuntu and using docker image of alpine Linux… then the user name and user id may vary…

    The article I have referenced shows how to remove users from your current Linux distro and add the same user with a different user id.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search