Docker MySQL啟動問題及解決過程
更新時間:2025年09月27日 16:03:36 作者:驚鴻Randy
Docker MySQL啟動失敗多因權限限制導致無法寫入/tmp和/var/run/mysqld目錄,推薦使用tmpfs掛載卷解決,同時需檢查SELinux和數(shù)據(jù)目錄權限,避免使用特權模式
問題概述
Docker 環(huán)境中的 MySQL 容器啟動失敗,主要表現(xiàn)為兩個核心錯誤:
- 臨時文件權限問題:
Can't create/write to file '/tmp/ibNysJx9' (Errcode: 13 - Permission denied)
- UNIX Socket 鎖文件問題:
Could not create unix socket lock file /var/run/mysqld/mysqld.sock.lock Unable to setup unix socket lock file
根本原因
這些問題的根本原因是 Docker 容器內的權限限制。
容器中的 MySQL 進程無法寫入特定目錄(/tmp 和 /var/run/mysqld),導致啟動失敗。
解決方案
方案一:使用 tmpfs 和掛載卷(推薦)
# 創(chuàng)建必要的目錄 mkdir -p /path/to/mysql/data mkdir -p /path/to/mysql/run/mysqld # 設置正確的權限 chmod -R 777 /path/to/mysql/data chmod 777 /path/to/mysql/run/mysqld chown -R 999:999 /path/to/mysql/data # MySQL 在容器中通常使用 UID 999 # 啟動容器 docker run --name mysql-5.7.30 \ --dns 8.8.8.8 \ --dns 114.114.114.114 \ --add-host=目標服務器的IP:127.0.0.1 \ --tmpfs /tmp:rw,exec,mode=1777 \ -v /path/to/mysql/data:/var/lib/mysql \ -v /path/to/mysql/run/mysqld:/var/run/mysqld \ -e MYSQL_ROOT_PASSWORD=your_password \ -p 3306:3306 \ -d mysql:5.7.30
方案二:使用自定義配置文件
# 創(chuàng)建配置目錄 mkdir -p /path/to/mysql/conf # 創(chuàng)建自定義配置文件 cat > /path/to/mysql/conf/my.cnf << EOF [mysqld] pid-file=/var/lib/mysql/mysqld.pid socket=/var/lib/mysql/mysqld.sock datadir=/var/lib/mysql skip-host-cache skip-name-resolve EOF # 啟動容器 docker run --name gwms-mysql \ --dns 8.8.8.8 \ --dns 114.114.114.114 \ --add-host=目標服務器的IP:127.0.0.1 \ --tmpfs /tmp:rw,exec,mode=1777 \ -v /path/to/mysql/data:/var/lib/mysql \ -v /path/to/mysql/conf/my.cnf:/etc/mysql/my.cnf \ -e MYSQL_ROOT_PASSWORD=your_password \ -p 3306:3306 \ -d mysql:5.7.30
方案三:使用特權模式(不推薦用于生產環(huán)境)
docker run --name gwms-mysql \ --privileged \ --dns 8.8.8.8 \ --dns 114.114.114.114 \ --add-host=目標服務器的IP:127.0.0.1 \ -v /path/to/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=your_password \ -p 3306:3306 \ -d mysql:5.7.30
其他可能需要考慮的因素
- SELinux:如果系統(tǒng)啟用了 SELinux,可能需要臨時禁用或設置適當?shù)纳舷挛?/li>
setenforce 0 # 臨時禁用 # 或者 chcon -Rt svirt_sandbox_file_t /path/to/mysql/data
- 數(shù)據(jù)目錄權限:確保數(shù)據(jù)目錄具有正確的所有權
chown -R 999:999 /path/to/mysql/data
- Docker 網(wǎng)絡問題:解決 DNS 解析問題
# 添加到 /etc/hosts echo "目標服務器的IP mysql-host" >> /etc/hosts
選擇適合您環(huán)境的方案,建議從方案一開始嘗試,它既解決了權限問題,又不會引入過多的安全風險。
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
mysql decimal數(shù)據(jù)類型轉換的實現(xiàn)
這篇文章主要介紹了mysql decimal數(shù)據(jù)類型轉換的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-02-02
SQL Server 完整備份遇到的一個不常見的錯誤及解決方法
這篇文章給大家介紹了SQL Server 完整備份遇到的一個不常見的錯誤及解決方法,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2019-05-05
windows 安裝解壓版 mysql5.7.28 winx64的詳細教程
這篇文章主要介紹了windows 安裝解壓版 mysql5.7.28 winx64的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12

