简体   繁体   English

为什么 MySQL Container 在 Windows 10 Home 上使用 WSL 2 不断重启?

[英]Why MySQL Container Keeps Restarting on Windows 10 Home with WSL 2?

I am trying to set up a Laravel development environment on my local machine, but my MySQL container keeps on restarting.我正在尝试在本地机器上设置 Laravel 开发环境,但我的 MySQL 容器不断重新启动。

Using: Windows 10 Home with WSL2 and Docker Desktop使用:带有 WSL2 和 Docker 桌面的 Windows 10 Home

docker-compose.yml 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) 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 . docker-compose psdocker deskop显示, mysql作为容器的状态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 mysql容器日志

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.

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: {}

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.我在开始使用 docker 时发布了这个问题......经过一些研究,我发现罪魁祸首是不同的 Linux 发行版对相同的用户名使用了不同的用户 ID。 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如果这对您有意义,请阅读这篇文章... 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.我必须从 ubuntu 中删除当前用户并添加与 alpine 用户匹配的用户。 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...可能这就是我认为的问题……如果您使用的是 ubuntu 并使用 alpine Linux 的 docker 映像……那么用户名和用户 ID 可能会有所不同……

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.我参考的文章展示了如何从您当前的 Linux 发行版中删除用户并添加具有不同用户 ID 的相同用户。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM