无法使用sed在mariadb Dockerfile中自定义缓冲区大小

我试图定制一个mariadb容器,以便增加innodb缓冲区大小。 我的理想场景是使用sed所以我不必维护一个重复的my.cnfconfiguration文件。

这里是我的Dockerfile,但它不会取代像我所期望的值,我不知道我在做什么错…

 FROM mariadb:10.1 RUN sed -ri 's/innodb_buffer_pool_size\\ =\\ 256M/innodb_buffer_pool_size\\ =\\ 512M/g' /etc/mysql/my.cnf \ && cat /etc/mysql/my.cnf | grep innodb; 

这个的输出是:

 Sending build context to Docker daemon 231.9 MB Step 1 : FROM mariadb:10.1 ---> 9a0138c02438 Step 2 : RUN sed -ri 's/innodb_buffer_pool_size\\ =\\ 256M/innodb_buffer_pool_size\\ =\\ 512M/g' /etc/mysql/my.cnf && cat /etc/mysql/my.cnf | grep innodb; ---> Running in eaedaf2837ff #innodb_log_file_size = 50M innodb_buffer_pool_size = 256M innodb_log_buffer_size = 8M innodb_file_per_table = 1 innodb_open_files = 400 innodb_io_capacity = 400 innodb_flush_method = O_DIRECT #innodb_autoinc_lock_mode=2 #innodb_flush_log_at_trx_commit=0 ---> b0e479c55581 Removing intermediate container eaedaf2837ff Successfully built b0e479c55581 

我已经尝试用\\逃脱空间,而不是逃避空间没有运气。

只是不要像你这样逃离空间:

  1. 空间不需要逃跑
  2. \\简单的引号里面的转义实际上创build一个\ char。 难怪为什么你的正则expression式不起作用。

这样可行:

 sed -i 's/innodb_buffer_pool_size = 256M/innodb_buffer_pool_size = 512M/g' /etc/mysql/my.cnf 
  1. 如果你真的要逃避什么,那只会是因为正则expression式,而不是shell,因为你使用了简单的引号,而shell不解释内容
  2. 这个特殊的例子你不需要-r, --regexp-extended开关。 正则expression式扩展包括正向查找的东西,…在这里不需要。

改进:使用组来调用匹配的值。 如果您必须更改参数名称,则需要较less的维护

 sed -i 's/\(innodb_buffer_pool_size\) = 256M/\1 = 512M/g' /etc/mysql/my.cnf 

或匹配多个参数名称

 sed -i 's/\(innodb_buffer_pool_size\|some_other_param\) = 256M/\1 = 512M/g' /etc/mysql/my.cnf