无法使用sed自定义mariadb Dockerfile中的缓冲区大小
我正试图定制一个mariadb容器,使其具有更大的innodb缓冲区大小。我的理想方案是使用无法使用sed自定义mariadb Dockerfile中的缓冲区大小,sed,docker,Sed,Docker,我正试图定制一个mariadb容器,使其具有更大的innodb缓冲区大小。我的理想方案是使用sed,这样我就不必维护重复的My.cnfconfig文件 这是我的Dockerfile,但它并没有像我预期的那样替换值,我也不确定我做错了什么 FROM mariadb:10.1 RUN sed -ri 's/innodb_buffer_pool_size\\ =\\ 256M/innodb_buffer_pool_size\\ =\\ 512M/g' /etc/mysql/my.cnf \
sed
,这样我就不必维护重复的My.cnf
config文件
这是我的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
我尝试过用
\\
逃出空格,但没有运气逃出空格。只是不要像你那样逃出空格:
\\
进行转义实际上会创建一个\
字符。难怪正则表达式不能工作sed -i 's/innodb_buffer_pool_size = 256M/innodb_buffer_pool_size = 512M/g' /etc/mysql/my.cnf
-r,--regexp extended
开关。regexp extended包括诸如正向查找之类的东西,这里不需要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
你到底为什么要尝试逃离空间?你过去做过什么不得不逃离空间的事情吗?这似乎是一件非常随机的事情,突然决定可能是个好主意,所以我想知道你过去是否做过一些错误的事情(例如不引用字符串),并且发现你可以让它“工作”“通过逃离空间而不是正确的方式,不管那是什么!