首页 > 解决方案 > mysql docker如何通过环境设置白名单

问题描述

  mysql:
image: mysql:mysql80
command: "--innodb_use_native_aio=0"
restart: always
environment:
  MYSQL_ROOT_PASSWORD: root
  MYSQL_USER: t_user
  MYSQL_PASSWORD: t_pwd
ports:
  - "3306:3306"
volumes:
  - $PWD/mysql/datadir:/var/lib/mysql
  - $PWD/mysql/conf.d:/etc/mysql/conf.d
networks:
  - net-website
container_name: mysql


php:
image: php:php73
restart: always
ports:
  - "9000:9000"
  - "9501:9501"
volumes:
  - $PWD/../:/var/www/html/
links:
  - mysql
depends_on:
  - mysql
networks:
  - net-website
container_name: php

我想知道如何设置 docker-compose.yml 文件以使用户t_user只能从另一个 docker 容器或我想访问的某些 IP 访问。

我没有在 mysql 的官方 docker 站点或 google 上找到关于此的文档。但我真的需要这个。

默认情况下,我的 yml 文件将创建一个用户: ,'t_user'@'%'但我想创建像 :'t_user'@'in_docker''t_user'@'ip_A''t_user'@'ip_B'

标签: mysqldocker

解决方案


您需要从初始文件创建用户。users.sql与您需要的所有用户一起创建文件。一个例子:

CREATE USER 't_user'@'in_docker' IDENTIFIED BY 'password';
GRANT USAGE ON `table`.* TO 't_user'@'in_docker' IDENTIFIED BY 'password' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
GRANT ALL PRIVILEGES ON `table`.* TO 't_user'@'in_docker';

放置users.sql$PWD/mysqldir 中并使用 volume 来提供这个文件作为初始数据:

volumes:
  - $PWD/mysql/datadir:/var/lib/mysql
  - $PWD/mysql/conf.d:/etc/mysql/conf.d
  - $PWD/mysql/users.sql:/docker-entrypoint-initdb.d/users.sql

官方 MySQL docker镜像描述说:

首次启动容器时,将创建一个具有指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它将执行 /docker-entrypoint-initdb.d 中的扩展名为 .sh、.sql 和 .sql.gz 的文件


推荐阅读