当我尝试连接到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撰写的日志:
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