mysql - 无法通过 docker 容器中的 Jyputer 读取 mysql(错误: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"
我还使用此命令创建了一个网络并将所有容器保存在一个网络下
码头工人网络连接我的网络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": {}
}
]
你需要 db 容器的 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()
推荐阅读
- javascript - 按钮在第一次点击时没有反应
- java - Java:返回 Int 值/多个值
- flexbox - flex-wrap:wrap 行不换行
- amazon-web-services - 使用 S3 + Glue + Athena 分析来自 EventBridge 的所有事件
- gradle - gradle 官方支持 johnrengleman 影子插件吗?
- c# - MVC 中的数据注释,按钮单击时未显示必需
- mysql - 如何选择借阅最多的书种
- c# - 将数据插入数据库时实体框架中的验证错误
- nix - vim 插件的自定义 Nix 派生失败
- json - BSON 在 MongoDB 中放松 JSON