Using Docker Compose 一节
使用compose 启动的mysql 容器不能访问,出现错误
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
我们知道,这是因为mysql 授权远程登录没有设置,但是我们通过 docker exec 仍然无法连接mysql
解决办法
通过在 docker-compose.yml 中声明挂载 docker-entrypoint-initdb.d 来解决,让mysql镜像 在初始化时执行增加远程登录权限的sql
docker-compose.yml
version: "3.7"
services:
app:
image: node:12-alpine
command: sh -c "yarn install && yarn run dev"
ports:
- 3000:3000
working_dir: /app
volumes:
- ./:/app
environment:
MYSQL_HOST: mysql
MYSQL_PORT: 3306
MYSQL_USER: root
MYSQL_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DB: todos
mysql:
image: mysql:5.7
volumes:
- "./conf/my.cnf:/etc/my.cnf"
- "./init:/docker-entrypoint-initdb.d/"
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_ROOT_HOST: ${MYSQL_ROOT_HOST}
MYSQL_DATABASE: todos
init/init.sql
use mysql;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
create database if not exists todos;