无法连接到MySQL Docker容器中的MySQL服务?

问题描述

因此,我有一个MysqL docker容器,在该容器上运行脚本以将其写入数据库,但是当我执行脚本时,脚本将抛出

MysqL.connector.errors.DatabaseError: 2003 (HY000): Can't connect to MysqL server on '127.0.0.1' (111)

我必须在Dockerfile中启动MysqL服务吗?

docker-compose.yml:

version: '3.3'

services:
  db:
    build: .
    restart: always
    environment: 
      MysqL_ROOT_PASSWORD: test
      MysqL_DATABASE: test
      MysqL_USER: test
      MysqL_PASSWORD: test
    volumes: 
      - ./db_data:/docker-entrypoint-initdb.d

解决方法

首先,您需要公开MySQL端口3306或为MySQL设置的任何其他端口 然后您可以从commmand参数获得帮助。

工作示例如下:

version: '3.1'

services:

  db:
    image: mysql
    container_name: mysql_test
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root_password
      MYSQL_DATABASE: test
      MYSQL_USER: test_user
      MYSQL_PASSWORD: test_password
    ports:
      - 30001:3306
    expose:
      - 30001
    volumes:
      - my-db:/var/lib/mysql
    networks:
      - test

networks:
  test:

volumes:
  my-db:
    driver: local

使用此示例代码,您将可以从主机将localhost:30001mysql_test:3306连接到数据库,并从同一网络中的其他容器将其连接到数据库。

,

如果要在主机中执行脚本,则需要导出端口3306

version: '3.3'

services:
  db:
    build: .
    restart: always
    environment: 
      MYSQL_ROOT_PASSWORD: test
      MYSQL_DATABASE: test
      MYSQL_USER: test
      MYSQL_PASSWORD: test
    ports:
      - 3306:3306
    volumes: 
      - ./db_data:/docker-entrypoint-initdb.d

如果您要在docker内部执行(例如,使用docker exec),请使用docker ps

检查容器是否已启动