我目前正在与 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+,这样我就可以从同一台机器上的客户端连接
我现在使用了不同的方法。对于我的用法,我不需要 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 且不需要自定义官方镜像的人,此方法按预期工作: