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

MacOS主机通过Python脚本访问Docker Compose中MariaDB容器失败求助

解决MacOS主机Python访问Docker Compose部署MariaDB的问题

核心问题本质

主机上的Python脚本不在Docker Compose的专属网络环境中,无法直接通过容器名mariadb访问服务;同时需确保MariaDB允许外部连接、端口映射正常生效。

具体解决步骤

1. 修正Python连接的主机地址

主机脚本不能用容器名mariadb作为连接地址,需替换为以下两种地址之一:

  • localhost:利用Docker的端口映射规则(3306:3306)直接访问
  • host.docker.internal:MacOS Docker Desktop提供的特殊地址,用于主机访问容器内服务

示例Python连接代码(基于mariadb包):

import mariadb

try:
    conn = mariadb.connect(
        user="test",
        password="mysqlpw",
        host="localhost",  # 替换为 host.docker.internal 也可
        port=3306,
        database="test1"
    )
    cursor = conn.cursor()
    print("连接成功!")
except mariadb.Error as e:
    print(f"连接失败:{e}")
finally:
    if 'conn' in locals():
        conn.close()

2. 确保MariaDB用户允许远程访问

默认创建的MariaDB用户仅允许容器内部localhost访问,需修改权限开放外部连接:

  1. 进入MariaDB容器:
    docker exec -it mariadb mysql -u root -pmysqlroot
    
  2. 在MariaDB命令行执行权限修改:
    GRANT ALL PRIVILEGES ON test1.* TO 'test'@'%' IDENTIFIED BY 'mysqlpw';
    FLUSH PRIVILEGES;
    
    其中%表示允许任意地址访问,也可指定具体IP范围进一步限制。

3. 检查端口占用与防火墙

  • 确认主机3306端口未被其他程序占用:
    lsof -i :3306
    
    若有占用,停止对应程序或修改Docker端口映射(比如改为3307:3306,同时Python代码端口改为3307)。
  • 临时关闭MacOS防火墙测试连接,若能成功则添加规则允许3306端口的入站访问。

4. 优化Docker Compose配置(可选)

不建议手动指定network_mode: bridge,Docker Compose默认会创建专属网络,既不影响容器间通信,也能正常映射端口到主机。修改后配置示例:

version: '3.9'

services:
  mariadb:
    image: mariadb:10.9.1-rc
    container_name: mariadb 
    ports:
      - 3306:3306
    volumes:
      - ...
    environment:
      - MYSQL_ROOT_PASSWORD=mysqlroot
      - MYSQL_PASSWORD=mysqlpw
      - MYSQL_USER=test
      - MYSQL_DATABASE=test1
      - TZ=Europe/Berlin

  phpmyadmin:
    image: phpmyadmin:5.2.0
    container_name: pma
    environment:
      - PMA_HOST=mariadb
      - PMA_PORT=3306
      - TZ=Europe/Berlin
    ports:
      - 8081:80

默认网络下,phpMyAdmin依然可以用mariadb作为主机地址连接,同时主机通过端口映射访问不受影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 18:48:42