简体   繁体   English

将 python 脚本连接到 docker 中的 mysql

[英]Connect python script to mysql in docker

I wanna connect my python script to MySQL in docker.我想将我的 python 脚本连接到 docker 中的 MySQL。 Here is my docker-compose file:这是我的 docker-compose 文件:

version: '3.7'

services:

  mysql:
    image: mariadb:${MARIADB_VERSION:-latest}
    container_name: mysql
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-password}
      - MYSQL_USER=${MYSQL_USER:-root}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD:-password}
      - MYSQL_DATABASE=${MYSQL_DATABASE:-db}
    restart: always

  script:
    container_name: script
    build: ./test_db
    command: bash -c "python3 testDb.py"
    environment:
      - DB_NAME=db
      - HOST=mysql
      - DB_USER=root
      - DB_PASSWORD=password
    volumes:
      - ./test_db:/var/www/html/script
    depends_on:
      - mysql

and here is my Python script file:这是我的 Python 脚本文件:

import pymysql

class TestDb:
    def run(self):
        conn = pymysql.connect(host='mysql', port=3306, database='db', user='root', password='password')
        print(conn)

if __name__ == "__main__":
    TestDb().run()

and here is my error:这是我的错误:

script    | Traceback (most recent call last):
script    |   File "/test_db/testDb.py", line 10, in <module>
script    |     TestDb().run()
script    |   File "/test_db/testDb.py", line 5, in run
script    |     conn = pymysql.connect(host='mysql', port=3306, database='sta_db', user='root', password='Alphashadow1381')
script    |   File "/usr/local/lib/python3.9/site-packages/pymysql/__init__.py", line 94, in Connect
script    |     return Connection(*args, **kwargs)
script    |   File "/usr/local/lib/python3.9/site-packages/pymysql/connections.py", line 327, in __init__
script    |     self.connect()
script    |   File "/usr/local/lib/python3.9/site-packages/pymysql/connections.py", line 619, in connect
script    |     raise exc
script    | pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'mysql' ([Errno 111] Connection refused)")

How can I connect my Python script to MySQL in docker?如何将我的 Python 脚本连接到 docker 中的 MySQL?

This usually means that the ports are not open, or a problem with the hostname!这通常意味着端口未打开,或者主机名有问题!

you haven't exposed the ports to the outside world, maybe add this line您还没有将端口暴露给外界,也许添加这一行

services:

  mysql:
    image: mariadb:${MARIADB_VERSION:-latest}
    container_name: mysql
    volumes:
      - ./mysql:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-password}
      - MYSQL_USER=${MYSQL_USER:-root}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD:-password}
      - MYSQL_DATABASE=${MYSQL_DATABASE:-db}
    restart: always
    ports:
      - "3306:3306"

i think you forgot to open your ports add this to your docker-copose: ports: - "3306:3306"我认为您忘记打开端口将其添加到您的 docker-copose:端口:-“3306:3306”

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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