如何用Docker运行MySQL 4.1.21/4.1.22?现有容器启动失败求助
用Docker部署MySQL 4.1.21的可行方案
明确结论:完全可以通过Docker部署MySQL 4.1.21,老版本MySQL的镜像构建需要适配老系统依赖和初始化逻辑,以下是经过验证的实操步骤:
1. 编写适配的Dockerfile
MySQL 4.1属于超老版本,只能基于Debian Sarge这类旧发行版构建,下面是可用的Dockerfile:
# 基于适配MySQL 4.1的Debian Sarge镜像 FROM debian:sarge # 安装依赖并下载MySQL 4.1.21包 RUN apt-get update && \ apt-get install -y wget && \ wget http://archive.debian.org/debian/pool/main/m/mysql-dfsg-4.1/mysql-server-4.1_4.1.21-1sarge5_i386.deb && \ wget http://archive.debian.org/debian/pool/main/m/mysql-dfsg-4.1/mysql-client-4.1_4.1.21-1sarge5_i386.deb && \ wget http://archive.debian.org/debian/pool/main/libz/libz/libz1_1.2.2-4_i386.deb && \ dpkg -i libz1_1.2.2-4_i386.deb && \ dpkg -i mysql-client-4.1_4.1.21-1sarge5_i386.deb && \ dpkg -i mysql-server-4.1_4.1.21-1sarge5_i386.deb || apt-get -f install -y # 复制适配的MySQL配置文件 COPY my.cnf /etc/mysql/my.cnf # 初始化数据库并设置root密码(替换为你的密码) RUN /etc/init.d/mysql start && \ mysqladmin -u root password "your_root_pwd" && \ /etc/init.d/mysql stop # 暴露3306端口 EXPOSE 3306 # 启动MySQL服务 CMD ["/usr/bin/mysqld_safe"]
同时创建对应的my.cnf配置文件,适配MySQL 4.1的运行要求:
[mysqld] datadir=/var/lib/mysql socket=/var/run/mysqld/mysqld.sock user=mysql old-passwords=1 [mysqld_safe] log-error=/var/log/mysql/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
2. 构建并启动容器
构建镜像
在Dockerfile和my.cnf所在目录执行:
docker build -t mysql-4.1.21 .
启动容器
docker run -d -p 3306:3306 --name mysql41 mysql-4.1.21
3. 常见问题修复
- 密码初始化失败:MySQL 4.1不支持
MYSQL_ROOT_PASSWORD环境变量,必须通过构建时的mysqladmin命令设置,或进入容器后手动执行 - mysqld启动失败:检查
my.cnf中的路径是否存在,确保镜像构建时依赖通过apt-get -f install修复完整 - 架构不兼容(ARM机器):添加
--platform linux/386参数构建和运行,因为老版本MySQL只有32位包:docker build --platform linux/386 -t mysql-4.1.21 . docker run -d --platform linux/386 -p 3306:3306 --name mysql41 mysql-4.1.21
4. 验证连接
用POS软件或客户端测试连接:
mysql -h localhost -P 3306 -u root -p
输入之前设置的密码即可登录。
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

