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

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

jyputer:

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 error 2005 - Unknown MySQL server host 'localhost'(11001) 127.0.0.1 本地主机 此网络已存在于 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

顺其自然

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()