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
Instead of mapped volumes for data persistence, I used the managed volume and it is not crashing anymore
Previous
Now
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.