我正在使用以下docker-compose设置:
db:
image: mysql:5.5
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: mysql
MYSQL_USER: userx
MYSQL_PASSWORD: password
MYSQL_DATABASE: mydb
我需要能够使用以下命令更新用户的权限:
GRANT ALL PRIVILEGES ON *.* TO 'userx' with grant option;
但我不想更改默认命令,因此我可以继续使用上述设置。但我真的不知道最好的方法是什么。
我试图从上面创建自己的图像:
FROM mysql:5.5
CMD mysqld && mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'snap' with grant option;"
任何人都可以指出我正确的方向
答案 0 :(得分:1)
两种可能的解决方案。
自定义图片
@Autowired
@Qualifier("cacheService")
private IService service;
编辑:未测试此选项。
FROM mysql:5.5
RUN mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'snap' with grant option;"
文件,或将.sql
文件与.sh
命令挂载到容器上的mysql -u ...
文件夹。编辑:由@jonnie测试的工作/docker-entrypoint-initdb.d
文件内容是
sh
答案 1 :(得分:0)
来自Docker Hub page for that image:
环境变量
启动mysql映像时,可以调整配置 MySQL实例通过传递一个或多个环境变量 docker run命令行。请注意,以下所有变量都不会 如果您使用数据目录启动容器,则会产生任何影响 已经包含一个数据库:任何预先存在的数据库将永远是 在集装箱启动时未触及。
因此,如果您没有数据目录,则可以设置一些环境变量,图像将为您执行GRANT
。看起来当前docker-compose
配置对于此行为是正确的。
MYSQL_ROOT_PASSWORD此变量是必需的,并指定 将为MySQL root超级用户帐户设置的密码。在里面 例如,它被设置为my-secret-pw。
MYSQL_DATABASE此变量是可选的,允许您指定 要在映像启动时创建的数据库的名称。如果是用户/密码 提供(见下文)然后该用户将被授予超级用户 访问(对应于GRANT ALL)到此数据库。
MYSQL_USER,MYSQL_PASSWORD这些变量是可选的,用于 结合以创建新用户并设置该用户的密码。这个 用户将被授予超级用户权限(见上文) 由MYSQL_DATABASE变量指定的数据库。这两个变量都是 创建用户所需。
请注意,不需要使用此机制来创建根 超级用户,默认情况下使用密码创建该用户 由MYSQL_ROOT_PASSWORD变量指定。