繁体   English   中英

将 python 脚本连接到 docker 中的 mysql

[英]Connect python script to mysql in docker

我想将我的 python 脚本连接到 docker 中的 MySQL。 这是我的 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

这是我的 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()

这是我的错误:

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)")

如何将我的 Python 脚本连接到 docker 中的 MySQL?

这通常意味着端口未打开,或者主机名有问题!

您还没有将端口暴露给外界,也许添加这一行

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"

我认为您忘记打开端口将其添加到您的 docker-copose:端口:-“3306:3306”

暂无
暂无

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

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