簡體   English   中英

無法使用 Python 腳本連接到 Docker 上的 MySQL 數據庫容器

[英]Cannot connect to MySQL database container on Docker with Python script

當我嘗試連接到 MySql 數據庫時,我的腳本卡住了。 它根本什么都不做。 我使用 docker-compose.yml 文件(如下所示)運行 MySql 數據庫。

version: '3.1'

services:

  db:
    image: mysql
    # NOTE: use of "mysql_native_password" is not recommended: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
    # (this is just an example, not intended to be a production configuration)
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: database

  adminer:
    image: adminer
    restart: always
    ports:
      - 3306:8080

我用於數據庫連接的 php 腳本:

<?php
    $conn = mysqli_connect('127.0.0.1', 'root', 'example', 'database');
    if ($conn->connect_errno) {
        echo("failed");
        exit();
    }
    $conn->close();
?>

我還創建了 python 腳本,該腳本也卡住了。 這是代碼:

import mysql.connector

mydb = None
try:
    mydb = mysql.connector.connect(
      host="127.0.0.1",
      user="root",
      password="database",
      use_pure=True
    )
except Exception as e:
    print(e)

print(mydb)

來自 docker-compose 的日志:

adminer_1  | [Thu Aug 11 22:03:52 2022] [::ffff:172.18.0.1]:56018 Accepted

出於測試目的,我使用了 php8.0-cli 和 python3。 你有什么想法可能是什么原因?

您將需要:

1:在數據庫 Docker 容器上公開端口,以允許通過您的應用程序訪問它

例如:

ports:
    - "3306:3306"

2:為您的應用程序創建一個可以在其中存儲腳本的容器,您可以通過虛擬網絡隧道進入您的 mysql 服務器。

例如:

networks:
  default:
    driver: bridge

通過在每個應用程序下添加以下內容,您可以在兩個應用程序上使用此網絡。

networks: 
    - default

這是一個很好的資源來幫助你。 https://runnable.com/docker/docker-compose-networking

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM