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



我试图自定义一个mariadb容器,使它有一个增加的innodb缓冲区大小。我的理想情况是使用sed,这样我就不必维护一个重复的my.cnf配置文件。

这是我的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. 转义与\在简单的引号实际上创建一个字符。难怪你的正则表达式不工作。

:

sed -i 's/innodb_buffer_pool_size = 256M/innodb_buffer_pool_size = 512M/g' /etc/mysql/my.cnf
  1. 如果你真的要转义一些东西,那将仅仅是因为regex,而不是shell,因为你使用了简单的引号,shell不会解释
  2. 的内容。
  3. 对于这个特定的示例,您不需要-r, --regexp-extended开关。Regexp扩展包括正向查找,…

改进:使用group收回匹配的值。如果必须更改参数名

,则维护更少
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

最新更新