【问题标题】:Can't connect MariaDB from Docker using Python无法使用 Python 从 Docker 连接 MariaDB
【发布时间】:2021-08-22 22:16:43
【问题描述】:

我正在尝试连接作为 docker-compose 服务运行的 mariadb。我有一个名为“app”的服务,其中包含一个新的 python 文件只是为了连接数据库。

成功连接phpmyadmin,但是当我尝试连接python时由于某种原因它失败了:

错误信息:

mysql.connector.errors.InterfaceError: 2003: Can't connect to MySQL server on 'mariadb:3306' (-3 Try again)

docker-compose.yml

version: "3"
services:
  app:
    build:
        context: .
        dockerfile: ./Dockerfile
    volumes:
      - ./app:/app
    command: >
        sh -c "python3 services/db_connection.py"
    depends_on:
        - mariadb
  prestashop:
    image: prestashop/prestashop
    networks:
      myprestashop:
    ports:
      - 8181:80
    links:
      - mariadb:mariadb
    depends_on:
      - mariadb
    volumes:
      - /srv/Configs/PrestaShop/src:/var/www/html
      - /srv/Configs/PrestaShop/src/modules:/var/www/html/modules
      - /srv/Configs/PrestaShop/src/themes:/var/www/html/themes
      - /srv/Configs/PrestaShop/src/override:/var/www/html/override
    environment:
      - PS_DEV_MODE=1
      - DB_SERVER=mariadb
      - DB_USER=root
      - DB_PASSWD=mycustompassword
      - DB_NAME=prestashop
      - PS_INSTALL_AUTO=0

  mariadb:
    image: mariadb
    networks:
      myprestashop:
    volumes:
      - /srv/Databases/PrestaShop:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=mycustompassword
      - MYSQL_DATABASE=prestashop

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    networks:
      myprestashop:
    links:
      - mariadb:mariadb
    ports:
      - 1235:80
    depends_on:
      - mariadb
    environment:
      - PMA_HOST=mariadb
      - PMA_USER=root
      - PMA_PASSWORD=mycustompassword

networks:
  myprestashop:

db_connection.py

import mysql.connector as database

connection = database.connect(
    user='root',
    password='mycustompassword',
    host='mariadb',
    database='prestashop')
    
if connection:
    print ("Connected Successfully")
else:
    print ("Connection Not Established")

感谢您的帮助

【问题讨论】:

    标签: python mysql docker docker-compose mariadb


    【解决方案1】:

    您忘记将myprestashop 网络添加到您的app 服务。如果服务没有任何明确定义的网络,它使用default 一个(它的名称类似于myproject_default)。所以错误的原因是app 服务在一个网络中,而其他一切都在另一个网络中(myprestashop)。

    【讨论】:

      猜你喜欢
      • 2018-03-12
      • 2020-02-29
      • 2019-08-02
      • 1970-01-01
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多