如何在Docker-Compose中配置MySQL容器,实现创建的用户可远程连接?
直接通过Docker Compose配置完成MySQL用户权限授予
你当前的Docker Compose配置需要手动进入容器执行权限授予语句,要实现无需手动操作,可通过修改command字段,让MySQL启动时自动执行权限配置语句,同时修正原配置中卷定义的语法错误:
version: '3.3' services: db: image: mysql/mysql-server restart: always environment: MYSQL_DATABASE: 'db' MYSQL_USER: 'user' MYSQL_PASSWORD: 'strongpasswordnobodycanguessorcrackatall' # Password for root access MYSQL_ROOT_PASSWORD: 'somethingevenmorestrongerthaneverbefore' ports: - '3306:3306' expose: - '3306' volumes: - compose-my-db:/var/lib/mysql command: > bash -c " echo 'GRANT ALL ON *.* TO \"c\"@\"%\"; FLUSH PRIVILEGES;' > /tmp/init.sql; exec mysqld --init-file=/tmp/init.sql " volumes: compose-my-db:
- 这里通过
command字段用bash命令组合,先把权限授予语句写入临时文件/tmp/init.sql - 然后用
exec启动MySQL服务,同时通过--init-file参数让MySQL在初始化阶段自动执行该SQL文件 - 修正了原配置中卷定义的语法错误,确保命名卷
compose-my-db正确挂载到MySQL的默认数据目录/var/lib/mysql
注意:这种方式只会在MySQL首次初始化(即对应卷为空时)执行一次权限配置,后续容器重启不会重复执行,避免出现权限重复授予的问题。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

