2016-08-21 50 views
0

我試圖自定義mariadb容器,以便它具有增加的innodb緩衝區大小。我的理想場景是使用sed,因此我不必保留重複的my.cnf配置文件。無法使用sed在mariadb中自定義緩衝區大小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. ,如果你真的有逃避的東西,那將是唯一的正則表達式,而不是shell的,因爲,因爲你已經使用了簡單的報價和外殼不解釋內容
  2. 你不需要-r, --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