簡體   English   中英

無法通過 docker 容器中的 Jyputer 讀取 mysql(錯誤:DatabaseError: 2005 (HY000): Unknown MySQL22 服務器主機')

[英]Unable to read mysql through Jyputer in docker containers (error: DatabaseError: 2005 (HY000): Unknown MySQL server host 'localhost:3306' (22))

我的代碼如下:

import mysql.connector
mydb = mysql.connector.connect(host="localhost:3306",user="root",password="example")
print("Connected")

Docker 為 mysql 和 jyputer 文件編寫:

# Use root/example as user/password credentials
version: '3.1'

services:

  db:
    image: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      AWS_ACCESS_KEY_ID: "A"
      AWS_SECRET_ACCESS_KEY: "k"

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

電腦:

version: "3"
services:
  pyspark:
    image: "jupyter/all-spark-notebook"
    volumes:
      - c:/code/pyspark-data:/home/jovyan
    ports:
      - 8888:8888
    environment:  
        AWS_ACCESS_KEY_ID: "5H"
        AWS_SECRET_ACCESS_KEY: "0oRBJk"  

我還使用此命令創建了一個網絡並將所有容器保存在一個網絡下

docker 網絡連接 mynetwork 929cd60b08df

在 jyputer 網絡中執行時收到錯誤:

 DatabaseError: 2005 (HY000): Unknown MySQL server host 'localhost:3306' (22)

我嘗試了什么:

mysql 錯誤 2005 - 未知 MySQL 服務器主機 'localhost'(11001) 127.0.0.1 localhost 這個網絡已經存在於 etc/hosts 文件夾中。 不知道現在該怎么辦

創建網絡時,您需要連接兩個容器

docker network create mynetwork
docker network connect mynetwork db_container_id
docker network connect mynetwork pyspark_container_id

然后獲取它的配置

docker network inspect mynetwork

它給出了這個橋接網絡的 IP 地址

[
    {
        "Name": "t11",
        "Id": "bb203079ab3e48badacb3bb53181dd6871b2f60f22b4079729bc069e1739bbe0",
        "Created": "2021-05-21T04:46:48.591105541Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.28.0.0/16",
                    "Gateway": "172.28.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {
            "3ff678e8ddeb600b1af38a06dda053c8bf6544b136bfca91363379df1d40c69a": {
                "Name": "t1_db_1",
                "EndpointID": "deefd7c8a187b9513fd074f9632f961312a3bdaa8aa568be6223f3d301389808",
                "MacAddress": "02:42:ac:1c:00:03",
                "IPv4Address": "172.28.0.3/16",
                "IPv6Address": ""
            },
            "9c95f68416586d3f1a87376a4a669df834d7b25eb22e3b3f33afb0ce1918d6cc": {
                "Name": "t2_pyspark_1",
                "EndpointID": "0fcbf15530f5b0a526c2036d26890e087f3becdd6eae1896e58a6a67efe2f676",
                "MacAddress": "02:42:ac:1c:00:02",
                "IPv4Address": "172.28.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {},
        "Labels": {}
    }
]

你需要數據庫容器的 IP,在這個例子中它是172.28.0.3

go 用它

mydb = mysql.connector.connect(port="3306", host="172.28.0.3", user="root", password="example")
print("Connected")
cursor = mydb.cursor()
query = ("select 1;")
cursor.execute(query)
for r in cursor:
    print(r)
cursor.close()

暫無
暫無

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

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