从 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主从环境搭建以及切换