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;