如何在 docker 中使用正确版本的 MySQL?

问题描述

我是 Docker 的初学者。也就是说,我注意到以下我认为有点奇怪的内容

在控制台中执行了一个 docker pull MysqL/MysqL-server:5.6.23 之后,在我玩了一点 Docker 和他的入门教程之后,我启动了拉取的 MysqL v5.6.23(不要问我为什么是这么旧的版本)容器和我意识到欢迎信息显示错误MysqL 版本:

Welcome to the MysqL monitor.  Commands end with ; or \g.
Your MysqL connection id is 2
Server version: 5.6.24 MysqL Community Server (GPL)
(...)

还在玩 docker 命令,我发现了以下内容

$ docker container inspect bde088053099
(...)
         "Config": {
            "Hostname": "bde088053099","Domainname": "","User": "","AttachStdin": false,"AttachStdout": true,"AttachStderr": true,"ExposedPorts": {
                "3306/tcp": {}
            },"Tty": false,"OpenStdin": false,"StdinOnce": false,"Env": [
                "MysqL_ROOT_PASSWORD=root","PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin","PACKAGE_URL=https://repo.MysqL.com/yum/mysql-5.6-community/docker/x86_64/MysqL-community-server-minimal-5.6.24-2.el7.x86_64.rpm"
            ],"Cmd": [
                "MysqLd"
            ],"Image": "MysqL/MysqL-server:5.6.23","Volumes": {
                "/var/lib/MysqL": {}
            },"WorkingDir": "","Entrypoint": [
                "/entrypoint.sh"
            ],"OnBuild": null,"Labels": {}
        },(...)

包 url 指向 MysqL 的下一个 subversion 而不是我的目标: "PACKAGE_URL=https://repo.MysqL.com/yum/mysql-5.6-community/docker/x86_64/MysqL-community-server-minimal-5.6.24-2.el7.x86_64.rpm" 虽然映像名称包含正确的版本号 "Image": "MysqL/MysqL-server:5.6.23"

解决方法

首先,是的,这个问题可以重现,但使用mysql/mysql-server:5.6.23,而不是mysql:5.6.23。您在帖子中的描述有冲突,请仔细检查。

接下来,我觉得5年前oracle团队在做build script发布的时候应该有5.6x的问题(比如5.6.24也没有ok),因为其他版本没问题。

所以,如果你坚持使用5.6.23,我建议你切换到docker pull mysql:5.6.23,这样就可以了(注意:不是 docker pull mysql/mysql-server:5.6.23):

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -it mysql:5.6.23 
mysql --version
mysql  Ver 14.14 Distrib 5.6.23,for Linux (x86_64) using  EditLine wrapper

最后,以上2个docker hub repo链接的区别:

都是官方镜像,只是mysql:5.6.23基于debian,mysql/mysql-server:5.6.23基于oracle linux。