无法使用sed在mariadb Dockerfile中自定义缓冲区大小
我试图定制一个mariadb容器,以便增加innodb缓冲区大小。 我的理想场景是使用sed
所以我不必维护一个重复的my.cnf
configuration文件。
这里是我的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
我已经尝试用\\
逃脱空间,而不是逃避空间没有运气。
只是不要像你这样逃离空间:
- 空间不需要逃跑
- 用
\\
简单的引号里面的转义实际上创build一个\
char。 难怪为什么你的正则expression式不起作用。
这样可行:
sed -i 's/innodb_buffer_pool_size = 256M/innodb_buffer_pool_size = 512M/g' /etc/mysql/my.cnf
- 如果你真的要逃避什么,那只会是因为正则expression式,而不是shell,因为你使用了简单的引号,而shell不解释内容
- 这个特殊的例子你不需要
-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