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

时间:2016-03-30 20:33:10

标签: mysql 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;

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

我试图从上面创建自己的图像:

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

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

2 个答案:

答案 0 :(得分:1)

两种可能的解决方案。

  1. 自定义图片

    @Autowired
    @Qualifier("cacheService")
    private IService service;
    
  2. 编辑:未测试此选项。

    1. 使用GRANT命令挂载(即添加卷)FROM mysql:5.5 RUN mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'snap' with grant option;" 文件,或将.sql文件与.sh命令挂载到容器上的mysql -u ...文件夹。
    2. 编辑:由@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变量指定。