![](/img/trans.png)
[英]How to connect to a mysql database on localhost from a python script in a docker container
[英]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.