执行docker-compose up后MySQL容器立即退出的问题求助
问题:Docker Compose启动MySQL服务时因Unix套接字被占用退出
执行sudo docker-compose up命令时,MySQL服务启动失败并立即退出,报错提示有其他进程占用Unix套接字文件。已尝试重新配置MySQL和Docker、重装MySQL,问题仍未解决,但同一配置在其他机器可正常运行。
docker-compose.yml配置文件
version: '3' services: app: build: context: ./ dockerfile: Dockerfile extra_hosts: - 'host.docker.internal:host-gateway' ports: - '8080:80' - '${VITE_PORT:-5173}:${VITE_PORT:-5173}' volumes: - '.:/var/www/html' networks: - sail depends_on: - mysql - redis - mailhog mysql: image: 'mysql/mysql-server:8.0' ports: - '${FORWARD_DB_PORT:-3306}:3306' environment: MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_ROOT_HOST: "%" MYSQL_DATABASE: '${DB_DATABASE}' MYSQL_USER: '${DB_USERNAME}' MYSQL_PASSWORD: '${DB_PASSWORD}' MYSQL_ALLOW_EMPTY_PASSWORD: 1 volumes: - 'sail-mysql:/var/lib/mysql' - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh' networks: - sail healthcheck: test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"] retries: 3 timeout: 5s redis: image: 'redis:alpine' ports: - '${FORWARD_REDIS_PORT:-6379}:6379' volumes: - 'sail-redis:/data' networks: - sail healthcheck: test: ["CMD", "redis-cli", "ping"] retries: 3 timeout: 5s mailhog: image: 'mailhog/mailhog:latest' ports: - '${FORWARD_MAILHOG_PORT:-1025}:1025' - '${FORWARD_MAILHOG_DASHBOARD_PORT:-8025}:8025' networks: - sail networks: sail: driver: bridge volumes: sail-mysql: driver: local sail-redis: driver: local
终端报错信息
ech-hub-api-mysql-1 | 2023-01-26T06:43:34.458966Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead. tech-hub-api-mysql-1 | 2023-01-26T06:43:34.460098Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.32) starting as process 1 tech-hub-api-mysql-1 | 2023-01-26T06:43:34.465939Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. tech-hub-api-mysql-1 | 2023-01-26T06:43:34.562068Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. tech-hub-api-mysql-1 | 2023-01-26T06:43:34.743847Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed. tech-hub-api-mysql-1 | 2023-01-26T06:43:34.743907Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel. tech-hub-api-mysql-1 | 2023-01-26T06:43:34.744467Z 0 [ERROR] [MY-010259] [Server] Another process with pid 62 is using unix socket file. tech-hub-api-mysql-1 | 2023-01-26T06:43:34.744489Z 0 [ERROR] [MY-010268] [Server] Unable to setup unix socket lock file. tech-hub-api-mysql-1 | 2023-01-26T06:43:34.744503Z 0 [ERROR] [MY-010119] [Server] Aborting tech-hub-api-mysql-1 | 2023-01-26T06:43:36.299171Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.32) MySQL Community Server - GPL. tech-hub-api-mysql-1 exited with code 1
解决建议
检查并停止宿主机本地MySQL进程
执行以下命令查看是否有本地MySQL进程在运行:ps aux | grep mysqld如果存在相关进程,执行命令停止服务:
sudo systemctl stop mysql # 或使用service命令(根据系统选择) sudo service mysql stop停止后重新运行
sudo docker-compose up。清理Docker相关的MySQL残留进程与资源
先停止所有相关容器:sudo docker-compose down清理残留的MySQL容器:
sudo docker rm -f $(sudo docker ps -aq --filter name=mysql)清理Docker无效资源(包括僵尸进程、未使用的镜像/卷):
sudo docker system prune -f完成后重新启动服务。
修改MySQL容器的Unix套接字路径
在docker-compose.yml的mysql服务中添加命令,指定自定义套接字路径,避免与宿主机冲突:mysql: # 保留原有配置 command: --socket=/tmp/mysql.sock同时可添加临时卷挂载套接字目录,确保权限正常:
mysql: volumes: # 保留原有卷配置 - '/tmp/mysql-socket:/tmp'重置Docker MySQL数据卷
如果数据卷中存在损坏的锁文件,可删除现有数据卷(注意:此操作会丢失所有MySQL数据,请提前备份):sudo docker volume rm sail-mysql重新运行
sudo docker-compose up,系统会自动创建新的数据卷并初始化MySQL。检查宿主机套接字文件权限
如果宿主机存在/var/run/mysqld/mysqld.sock文件,临时调整其权限测试:sudo chmod 777 /var/run/mysqld/mysqld.sock若问题解决,可考虑调整Docker容器的用户权限(如添加
user: root到mysql服务配置),但需注意安全风险。
内容的提问来源于stack exchange,提问作者Lasha Lilu
相关产品推荐
相关产品推荐

