无法连接到数据库上的MySQL服务器。节点名称或服务器,或者使用Docker不知道或未知

时间:2020-04-24 19:29:10

标签: flask

我正在尝试将我的应用程序连接到我已建立并在docker-compose文件中运行的mysql数据库。我正在使用flask并尝试使用DBUtils连接 我不断收到标题中描述的错误消息:

(pymysql.err.OperationalError:(2003,“无法连接到'db'上的MySQL服务器([Errno 8]节点名或提供的服务名,或者未知)”)

我已经尝试过使用我的docker实例的IPAddresses以及在StackOverflow上讨论的类似问题中的其他几种解决方案: Docker-Compose can't connect to MySQL
Connecting to MySQL from Flask Application using docker-compose

但是,提供的解决方案似乎不适用于我。

我的docker-compose文件如下所示:

version: '3.3'

services:
  db:
    image: mysql:8.0
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 'myPassword'
      MYSQL_DATABASE: 'databaseName'

    volumes:
      - .:/dockerFiles

    ports:
      - "3306:3306"
    expose:
      - "3306"

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin

    restart: always

    ports:
      - "8080:80"
    volumes:
      - /sessions

我的连接字符串如下:

def connect_db():
# Connects to the database and takes care of the connection
return PersistentDB(
    creator=pymysql, host='db',
    user='root', password='myPassword', database='databaseName', port=3306,
    autocommit=True, charset='utf8mb4',
    cursorclass=pymysql.cursors.DictCursor)

1 个答案:

答案 0 :(得分:0)

错误[Errno 8] nodename nor servname provided, or not known表示找不到数据库服务器。因此,host='db'仅在您的Python代码位于数据库服务db的同一网络中的docker内部时才有效。尝试在docker-compose中为Python代码添加服务:

version: '3.3'

services:
  db:
    image: mysql:8.0
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 'myPassword'
      MYSQL_DATABASE: 'databaseName'
    volumes:
      - .:/dockerFiles
    ports:
      - "3306:3306"
    expose:
      - "3306"

  web:
    build: . # where is your dockerfile
    command: sh -c 'python app.py' # this should be the command to start your application
    ports:
     - "8082:8082"
    volumes:
     - .:/code # it depends on the WORKDIR of your dockerfile
    links:
     - db