You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker安装MySQL时设置root密码方法及2002连接报错解决

问题原因
  • 核心原因:容器启动时MySQL服务未运行。Docker镜像构建阶段(RUN指令执行时)的所有操作仅作用于临时构建层,构建完成后所有运行中的进程都会终止,你配置的CMD为/bin/sh,容器启动后默认不会拉起MySQL服务,自然找不到sock文件。
  • debconf密码配置错误:你使用的键名绑定了具体版本号mysql-server-8.0.26,如果apt安装的MySQL版本和该版本不匹配,密码配置不会生效,后续MySQL初始化会失败。
  • 交互式脚本阻塞构建:mysql_secure_installation是交互式工具,在无交互的构建环境中运行会直接卡住或执行失败,导致后续修改权限、重启服务的步骤都不生效。
  • 冗余防火墙配置:Docker容器的端口管控由Docker引擎负责,容器内开启ufw不仅多余,还可能阻塞MySQL端口,导致服务启动异常。
  • 配置文件路径错误:Ubuntu 20.04默认MySQL 8.0的主配置文件路径为/etc/mysql/mysql.conf.d/mysqld.cnf,你修改的/etc/mysql/my.cnf默认不存在,配置不生效。
修复方案

1. 修改mysql_setup.sh脚本

# 安装系统更新
apt-get update && apt-get upgrade -y

# 设置时区
echo "America/Chicago" > /etc/timezone
dpkg-reconfigure -f noninteractive tzdata

# 安装基础依赖,debconf-utils为debconf配置工具必需依赖
apt-get -y install zsh htop debconf-utils

# 非交互安装MySQL,默认root密码设置为root
echo "mysql-server mysql-server/root_password password root" | debconf-set-selections
echo "mysql-server mysql-server/root_password_again password root" | debconf-set-selections
apt-get -y install mysql-server

# 修改正确的配置文件,允许远程访问
sed -i 's/127\.0\.0\.1/0\.0\.0\.0/g' /etc/mysql/mysql.conf.d/mysqld.cnf

# 临时启动MySQL配置root账号权限
service mysql start
mysql -uroot -proot -e 'USE mysql; UPDATE `user` SET `Host`="%" WHERE `User`="root" AND `Host`="localhost"; FLUSH PRIVILEGES;'

# 停止MySQL,方便后续容器启动时正常拉起
service mysql stop

2. 修改Dockerfile

将默认启动命令修改为前台运行MySQL,保持容器存活:

FROM ubuntu:20.04

COPY mysql_setup.sh /software/mysql_setup.sh
RUN chmod +x /software/mysql_setup.sh && sh /software/mysql_setup.sh

# 前台启动MySQL
CMD ["mysqld", "--user=mysql"]

3. 构建验证

执行构建命令:
docker build -t custom-mysql .
执行容器启动命令:
docker run -d -p 3306:3306 --name mysql-test custom-mysql
进入容器验证登录:
docker exec -it mysql-test mysql -uroot -proot

如果仅需要临时验证原有容器的登录功能,进入原有容器后先执行service mysql start再登录即可。

内容的提问来源于stack exchange,提问作者Manish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:24:01