gpt4 book ai didi

python - 使用 Python 连接到 Docker 容器中的 MySQL

转载 作者:行者123 更新时间:2023-12-02 18:52:03 25 4
gpt4 key购买 nike

我正在使用 pony.orm 使用 python 代码连接到 mysqldb:

db.bind(provider='mysql', user=username, password=password, host='0.0.0.0', database=database)

当我编写 docker compose 文件时:
  db:
image: mariadb
ports:
- "3308:3306"
environment:
MYSQL_DATABASE: db
MYSQL_USER: root
MYSQL_ROOT_PASSWORD: ''

如何通过在 docker-compose.yml 文件中提供一个值(在环境中:) 将主机名传递给 python 程序?

如果我传递值,我可以通过 Python 代码中的 os.environ['PARAM'] 访问该值吗?

最佳答案

因为您已将服务命名为 dbdocker-compose.yaml ,您可以将其用作 host ,前提是您在同一网络上:

db.bind(provider='mysql', user=username, password=password, host='db', database=database)

为确保您在该网络上,请在您的 docker-compose.yaml 中,在底部,你会想要:
networks:
default:
external:
name: <your-network>

并且您需要在运行 docker-compose up 之前创建该网络

docker network create <your-network>

这避免了对环境变量的需要,因为容器名称将被添加到网络的路由表中。

您不需要定义自己的网络,如 docker-compose将为您处理这个问题,但如果您希望更明确一点,它可以让您灵活地这样做。通常,您会将其保留给要在单个网络上连接在一起的多个组合解决方案,但此处并非如此。

它在 docker-compose 中处理和你在 Vanilla 中做的一样 docker :

docker run -d -p 3308:3306 --network <your-network> --name db mariadb
docker run -it --network <your-network> ubuntu bash

# in the shell of the ubuntu container
apt-get update && apt-get install iputils-ping -y
ping -c 5 db

# here you will see the results of ping reaching container db
5 packets transmitted, 5 received, 0% packet loss, time 4093ms

编辑

请注意,根据@DavidMaze 的评论,您将与之通信的端口是 3306,因为这是容器正在监听的端口,而不是 3308。

关于python - 使用 Python 连接到 Docker 容器中的 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56261648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com