如何在不中断默认行为的情况下扩展默认的docker映像命令

我正在使用以下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; 

但我不想更改默认命令,所以我可以继续使用上面的设置。 但我真的不知道最好的方法是什么。

我试图从上面创build自己的形象:

 FROM mysql:5.5 CMD mysqld && mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'snap' with grant option;" 

任何人都可以把我指向正确的方向

两种可能的解决

  1. 自定义图像

     FROM mysql:5.5 RUN mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'snap' with grant option;" 

编辑:这个选项没有testing。

  1. 使用GRANT命令挂载(即添加卷) .sql文件,或使用mysql -u ...命令将.sh文件/docker-entrypoint-initdb.d到容器上的/docker-entrypoint-initdb.d文件夹。

编辑:工作sh文件的内容,由@jonnietesting是

 mysql --user="root" --password="rootpass" -e "GRANT ALL PRIVILEGES ON *.* TO 'snap' with grant option;" 

从该映像的Docker Hub 页面 :

环境variables

在启动mysql映像时,可以通过在docker run命令行上传递一个或多个环境variables来调整MySQL实例的configuration。 请注意,如果使用已包含数据库的数据目录启动容器,则下面的任何variables都不会起作用:在容器启动时,任何预先存在的数据库始终保持不变。

所以,如果你没有数据目录,那么你可以设置一些环境variables,图像将为你执行GRANT 。 看起来,当前的docker-composeconfiguration对于这种行为是正确的。

MYSQL_ROOT_PASSWORD此variables是强制性的,并指定将为MySQL根超级用户帐户设置的密码。 在上面的例子中,它被设置为my-secret-pw。

MYSQL_DATABASE这个variables是可选的,允许你指定在映像启动时创build的数据库的名字。 如果提供了用户/密码(见下文),那么该用户将被授予对该数据库的超级用户访问(对应于GRANT ALL)。

MYSQL_USER,MYSQL_PASSWORD这些variables是可选的,用于创build新用户并设置该用户的密码。 该用户将获得MYSQL_DATABASEvariables指定的数据库的超级用户权限(见上)。 这两个variables都是创build用户所必需的。

请注意,不需要使用此机制来创build根超级用户,该用户默认使用由MYSQL_ROOT_PASSWORDvariables指定的密码创build。