Docker:无法连接到本地计算机上的 MySQL 容器

问题描述 投票:0回答:1

我目前正在与 Symfony 一起开发一个 api 应用程序。

我的第一步是运行一个 MySQL 容器来创建所需的数据库。

我在 3.9 版中使用 Docker-Compose,我想安装 MySQL 8+ 版。

我在我的 .env 中写下了所需的环境参数:

MYSQL_DATABASE=swagger_api
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_ROOT_PASSWORD=root
MYSQL_PORT=3306

这是我的 docker-compose:

version: '3.9'
services:
  ### MySQL Container
  mysql:
    container_name: mysql_container
    hostname: mysql_container_host
    command: mysqld --default-authentication-plugin=mysql_native_password
    build:
      context: ./
      args:
        MYSQL_DATABASE: ${MYSQL_DATABASE}
        MYSQL_USER: ${MYSQL_USER}
        MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
        MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    ports:
      - "${MYSQL_PORT}:3306"
    networks:
      default:
        aliases:
          - mysql_alias

这是我的 Dockerfile:

FROM mysql:latest

MAINTAINER XXX <[email protected]>

RUN chown -R mysql:root /var/lib/mysql

ARG MYSQL_DATABASE
ARG MYSQL_USER
ARG MYSQL_PASSWORD
ARG MYSQL_ROOT_PASSWORD

ENV MYSQL_DATABASE = $MYSQL_DATABASE
ENV MYSQL_USER = $MYSQL_USER
ENV MYSQL_PASSWORD = $MYSQL_PASSWORD
ENV MYSQL_ROOT_PASSWORD = $MYSQL_ROOT_PASSWORD

#if we need to import data from sql file

#ADD data.sql /etc/mysql/data.sql
#RUN sed -i 's/MYSQL_DATABASE/'$MYSQL_DATABASE'/g' /etc/mysql/data.sql
#RUN cp /etc/mysql/data.sql /docker-entrypoint-initdb.d

EXPOSE 3306

容器已启动并正在运行。我正在使用带有 MacOS 版本 Ventura 13.0.1.

的机器

但是,当我尝试使用我的数据库客户端中设置的凭据登录时,我收到此错误:

当我进入我的 mysql_container 的 bash 并回显我之前设置的环境变量时,一切看起来都很好:

我在这里错过了什么?有什么改进或反馈吗?我基本上想在容器内使用 MySQL 8+,这样我就可以从同一台机器上的客户端连接

mysql docker docker-compose docker-container
1个回答
0
投票

我现在使用了不同的方法。对于我的用法,我不需要 Dockerfile,因为我只想设置默认用户和密码(现在)。

我将 docker-compose.yml 更改为:

version: '3.9'
services:
  ### MySQL Container
  mysql:
    container_name: mysql_container
    image: mysql:latest
    hostname: mysql_container_host
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    ports:
      - "${MYSQL_PORT}:3306"
    networks:
      default:
        aliases:
          - mysql_alias

对于任何使用 MacOS 且不需要自定义官方镜像的人,此方法按预期工作:

© www.soinside.com 2019 - 2024. All rights reserved.