![](/img/trans.png)
[英]How to connect to a mysql database on localhost from a python script in a docker container
[英]Connect to MySQL in Docker container using Python
我正在使用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']访问值?
因为您已经在docker-compose.yaml
服务db
命名为db
,所以可以将其用作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
处理的方式与在香草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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.