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

Docker中使用mariabackup无法连接MariaDB的问题求助

解决MariaDB容器中mariabackup无法通过socket连接的问题

问题背景

现有可正常运行的Docker Compose配置(WordPress + MariaDB):

version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: wp_db
    volumes:
      - ./wordpress:/var/www/html
    networks:
      - my_network

  db:
    image: mariadb:10.7.8
    restart: always
    environment:
      MYSQL_DATABASE: wp_db
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: password
      MYSQL_ROOT_PASSWORD: password
      MARIADB_MYSQL_LOCALHOST_USER: 1
      MARIADB_MYSQL_LOCALHOST_GRANTS: "RELOAD, PROCESS, LOCK TABLES, BINLOG MONITOR"
    volumes:
      - ./data:/docker-entrypoint-initdb.d
      - ./datadir:/var/lib/mysql
      - backup:/backup
    networks:
      - my_network

volumes:
  backup:

networks:
  my_network:
    driver: bridge

执行以下备份命令时出现错误:

docker compose run db mariabackup --backup --target-dir=/backup

错误输出:

[00] 2023-03-18 16:32:15 Connecting to MariaDB server host: localhost, user: not set, password: not set, port: not set, socket: /run/mysqld/mysqld.sock
[00] 2023-03-18 16:32:15 Failed to connect to MariaDB server: Can't connect to local server through socket '/run/mysqld/mysqld.sock' (2 "No such file or directory").

疑惑点:socket路径显示为/run/mysqld/mysqld.sock,预期应为/var/run/mysqld/mysqld.sock。

解决方案

核心原因

docker compose run会启动一个全新的容器实例,而非连接到正在运行的db容器。这个新容器里的MariaDB服务并未启动,所以找不到socket文件;另外,该MariaDB镜像的默认socket路径确实是/run/mysqld/mysqld.sock,但服务未启动时文件自然不存在。

正确执行命令

要在已运行的db容器中执行备份,需使用docker compose exec命令,同时指定拥有备份权限的数据库用户和密码:

docker compose exec db mariabackup --backup --user=root --password=password --target-dir=/backup

额外说明

  • 如果需要显式指定socket路径,可以添加--socket参数,不过在运行中的容器里默认路径是有效的,一般无需额外指定:
docker compose exec db mariabackup --backup --user=root --password=password --socket=/run/mysqld/mysqld.sock --target-dir=/backup
  • 确认backup卷已正确挂载,备份文件会保存到这个持久化卷中,不会随容器销毁丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:15:37