2016-08-21 4 views
0

mariadbコンテナをカスタマイズして、innodbバッファサイズを増やそうとしています。私の理想的なシナリオは、sedを使用することになるので、my.cnfの設定ファイルを重複して管理する必要はありません。mariadbでバッファサイズをカスタマイズするためにsedを使用できませんDockerfile

ここに私の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 

私は\\でスペースをエスケープしていない運でスペースをエスケープしないで試した

+0

に一致するパラメータ名を変更する必要がありますか?スペースを脱出しなければならなかった過去に行ったことはありますか?それはちょうど非常にランダムなもののように思えるので、私はあなたが過去に何か間違っている(例えば文字列を引用していない)か、あなたがスペースをエスケープするのではなく、それを正しい方法で実行することです。 –

答えて

2

だけのスペースをエスケープしていない:

個の
  1. スペースが実際に\文字を作成する簡単な引用符の内側\\でエスケープ
  2. をエスケープする必要はありません。正規表現が動作しない理由は不思議ではありません。

    sed -i 's/innodb_buffer_pool_size = 256M/innodb_buffer_pool_size = 512M/g' /etc/mysql/my.cnf 
    
    1. をあなたは、単純な引用符を使用していると、シェルが解釈しないので、あなたが本当に、唯一の理由は正規表現のものであろう何か、ではなく、シェルをエスケープする必要がある場合:作品

    内容

  3. この特定の例では、-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 
関連する問題