从 mariadb:10 切换到 mariadb:10.4 映像时,docker 容器不断重启

Posted

技术标签:

【中文标题】从 mariadb:10 切换到 mariadb:10.4 映像时,docker 容器不断重启【英文标题】:Constant restarts of docker container when switching from mariadb:10 to mariadb:10.4 image 【发布时间】:2021-05-25 02:47:51 【问题描述】:

我目前正在使用 docker-compose 为开发目的设置一个 docker 容器组。

我有一个 web 容器、一个 mysql 容器和一个 phpmyadmin 容器。 我使用https://dockerfile.readthedocs.io/en/latest/content/DockerImages/dockerfiles/php-apache-dev.html 作为 web 容器,使用 mariadb:10 镜像作为 mysql 容器,phpmyadmin/phpmyadmin:latest 作为 phpmyadmin 镜像。

docker-compose.yml 文件如下所示:

version: '3'
services:
    web:
        container_name: web
        restart: always
        image: webdevops/php-apache-dev:7.4
        user: application
        environment:
            - COMPOSER_VERSION=1
            - WEB_ALIAS_DOMAIN=localhost
            - WEB_DOCUMENT_ROOT=/app/pub
            - PHP_DATE_TIMEZONE=EST
            - PHP_DISPLAY_ERRORS=1
            - PHP_MEMORY_LIMIT=2048M
            - PHP_MAX_EXECUTION_TIME=300
            - PHP_POST_MAX_SIZE=500M
            - PHP_UPLOAD_MAX_FILESIZE=1024M
        volumes:
            - /projects/project-x:/app:cached
        ports:
            - '80:80'
            - '443:443'
            - '32823:22'
        links:
            - mysql
    mysql:
        container_name: mysql
        restart: always
        image: mariadb:10
        ports:
            - '3306:3306'
        environment:
            - MYSQL_ROOT_PASSWORD=root
            - MYSQL_DATABASE=magento
        volumes:
            - db-data:/var/lib/mysql
    phpmyadmin:
        container_name: phpmyadmin
        restart: always
        image: phpmyadmin/phpmyadmin:latest
        environment:
            - MYSQL_ROOT_PASSWORD=root
            - PMA_USER=root
            - PMA_PASSWORD=root
        ports:
            - '8080:80'
        links:
            - mysql:db
        depends_on:
            - mysql
volumes:
    db-data:
        external: false

这很好用。但是,我的开发项目需要10.2-10.4版本的mariadb,以上都没有。标准的 mariadb:10 映像目前提供 10.5。

当我将image: mariadb:10 更改为image: mariadb:10.4 时,当我运行docker-compose up -d --build 时,容器会不断重启。

我在 https://hub.docker.com/_/mariadb 上检查了指针,但在使用 10.5 或 10.4 或 10.2 设置容器时找不到任何区别。

有什么想法吗?

编辑

我按照@xdhmoore 的建议将重新启动更改为“否”。 这是我从容器中获取的日志:

2021-02-22 20:34:56+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.4.17+maria~focal started.

2021-02-22 20:34:57+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'

2021-02-22 20:34:57+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 1:10.4.17+maria~focal started.

2021-02-22 20:34:57 0 [Note] mysqld (mysqld 10.4.17-MariaDB-1:10.4.17+maria~focal) starting as process 1 ...

2021-02-22 20:34:57 0 [Note] InnoDB: Using Linux native AIO

2021-02-22 20:34:57 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins

2021-02-22 20:34:57 0 [Note] InnoDB: Uses event mutexes

2021-02-22 20:34:57 0 [Note] InnoDB: Compressed tables use zlib 1.2.11

2021-02-22 20:34:57 0 [Note] InnoDB: Number of pools: 1

2021-02-22 20:34:57 0 [Note] InnoDB: Using SSE2 crc32 instructions

2021-02-22 20:34:57 0 [Note] mysqld: O_TMPFILE is not supported on /tmp (disabling future attempts)

2021-02-22 20:34:57 0 [Note] InnoDB: Initializing buffer pool, total size = 256M, instances = 1, chunk size = 128M

2021-02-22 20:34:57 0 [Note] InnoDB: Completed initialization of buffer pool

2021-02-22 20:34:57 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().

2021-02-22 20:34:57 0 [ERROR] InnoDB: Unsupported redo log format. The redo log was created with MariaDB 10.5.8.

2021-02-22 20:34:57 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error

2021-02-22 20:34:57 0 [Note] InnoDB: Starting shutdown...

2021-02-22 20:34:58 0 [ERROR] Plugin 'InnoDB' init function returned error.

2021-02-22 20:34:58 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.

2021-02-22 20:34:58 0 [Note] Plugin 'FEEDBACK' is disabled.

2021-02-22 20:34:58 0 [ERROR] Unknown/unsupported storage engine: InnoDB

2021-02-22 20:34:58 0 [ERROR] Aborting

然后我用谷歌搜索了发生的第一个错误,发现:MYSQL 8.0 - unsupported redo log format

看来我需要删除 /var/lib/mysql/ 来解决我的问题。 但是,这是在我无法启动的 docker 容器内。另外,我每次启动时都会重建这个容器,所以我不知道如何清除这个目录?

【问题讨论】:

哦:但是,这是在我无法启动的 docker 容器中。 => 不,不是。 - db-data:/var/lib/mysql 这是一卷。删除它,你就很好了。 你说得对,谢谢你的帮助。我跑了docker volume ls 然后docker volume rm <name-of-volume> 并且有效。问题确实是日志文件夹最初是使用更高版本的 mariadb 创建的。 嘘!团队合作。 【参考方案1】:

听起来好像无法启动,然后docker-compose 不断地重新启动它,导致无法读取任何启动日志。你可以告诉docker-compose不要这样做,根据码头here将你的mysql restart更改为no。这应该让您有机会进行部分启动并阅读日志中的实际故障。

【讨论】:

嘿@xdhmoore 我听从了你的建议,并在我最初的帖子的编辑中发布了结果。我可能已经找到了解决方案,但不知道如何在 docker 中应用它 --> 如何删除容器内的日志文件目录,该目录仅在我运行时存在,但不允许我进入,因为它没有正确启动? @codingforworlddomination 你的音量是db-data。所以你可以做的是附加任何简单的容器(比如基本的debian或ubuntu),清理所说的文件夹,看看那里会发生什么 确实,这行得通:我运行docker volume ls,然后运行docker volume rm <name-of-volume> 并再次启动。问题确实是日志文件夹最初是使用更高版本的 mariadb 创建的。非常感谢您的帮助!

以上是关于从 mariadb:10 切换到 mariadb:10.4 映像时,docker 容器不断重启的主要内容,如果未能解决你的问题,请参考以下文章

Mariadb 10.2.8版本GTID主从环境搭建以及切换

从 MySQL 5.6.35 迁移到 MariaDB 10.6.3 - 查询不起作用

MariaDB 10.3 主从半同步复制

如何把mariadb迁移到mysql

mariadb 怎么换mysql

搭建基于mariadb和nginx的wordpress