繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM