在docker镜像中安装mysql客户端

Res*_*n01 3 php mysql docker

我正在尝试为 php 构建一个 docker 映像,它可以处理我的 mysql 容器中的数据库转储。问题是好像安装了mariadb版本而不是mysql版本的客户端。这给了我一个错误mysqldump: unknown variable 'set-gtid-purged=OFF'

执行转储的脚本不是我可以更改的,因为它是 Laravel 核心的一部分。它检测服务器 sql 版本以查看它是否应该添加该命令。所以我真的需要在我的 php 图像/容器上有正确的客户端版本。

这是我的 Dockerfile

FROM library/php:7.4-fpm

RUN apt-get update \
    && apt-get install -y default-mysql-client
Run Code Online (Sandbox Code Playgroud)

Res*_*n01 7

我设法找到了解决方案。我决定通读官方mysql镜像是如何构建的,并在这里实现相同的解决方案。

https://hub.docker.com/layers/mysql/library/mysql/latest/images/sha256-b589f11ab39a852fd13090aeb56314978c73a16d615e28ec148306889b67889f?context=explo

所以添加这个,安装所需的客户端,一切正常。

RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 8C718D3B5072E1F5

RUN echo "deb http://repo.mysql.com/apt/debian/ buster mysql-8.0" > /etc/apt/sources.list.d/mysql.list

RUN apt-get update \
    && apt-get install -y mysql-community-client
Run Code Online (Sandbox Code Playgroud)

  • 截至 2021 年 11 月,这种情况发生了一些变化;第一个 RUN 语句需要替换为 https://hub.docker.com/layers/mysql/library/mysql/8.0/images/sha256-975b3b1a6df6bf66221d1702b76c4141a4cd09f93f22f70c32edc99a6c256fe8?context=explore 的步骤 9 (3认同)

小智 6

如果您构建该图像然后运行 docker run -it <MyImageName> bash您可以探索正在发生的事情。

apt show default-mysql-client 显示以下内容,所以你是正确的,它是 mariadb。

root@ff27370412ab:/var/www/html# apt show default-mysql-client
Package: default-mysql-client
Version: 1.0.5
Priority: optional
Section: database
Source: mysql-defaults
Maintainer: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>
Installed-Size: 10.2 kB
Depends: mariadb-client-10.3
Download-Size: 3532 B
APT-Manual-Installed: yes
APT-Sources: http://deb.debian.org/debian buster/main amd64 Packages
Description: MySQL database client binaries (metapackage)
Run Code Online (Sandbox Code Playgroud)

然后您可以运行apt search mysql查找其他可以使用的包。

我浏览了其中的一些,但没有发现任何看起来像非 maraidb 的内容。但您可以使用以下步骤将其添加到您的 apt 存储库中。 https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/