2017-06-16 488 views
1

首先,我知道不要以root身份正常運行。我有一個異常情況:我需要與--tab說法,這就需要允許寫入到磁盤使用mysqldump,我想用多克爾容器外的那些文件。我可以解釋爲什麼以根用戶身份運行mysqld使這更容易,但是這個問題不是足夠長嗎?以root運行是在這種情況下,安全的,因爲容器將僅適用於運行測試和更新基於SQL遷移腳本DB備份​​腳本中使用,它會開始做1個職位空缺,然後取回來了。如何在官方的MySql docker鏡像中以root身份運行mysqld?

當我谷歌如何以root身份運行mysqld的,我覺得在instructions on how to NOT run as root間接地給出了答案。其中包括以user_name身份運行mysqld:

以用戶user_name的身份啓動服務器。另一種方法是以Unix root用戶身份啓動mysqld並使用--user = user_name選項。

要在系統啓動時自動以給定用戶身份啓動服務器,請通過向/etc/my.cnf選項文件或my.cnf選項文件的[mysqld]組添加用戶選項來指定用戶名在服務器的數據目錄中。

我們做的一個?這兩個?我會假設兩個以防萬一。但是,它們的真正含義是/etc/my.cnf,還是依賴於安裝(例如,Linux發行版)?例如。 Docker鏡像mysql:5.6/etc/mysql/my.cnf。所述directions for the MySql Docker圖像提醒安裝在/etc/mysql/conf.d其在上述的my.cnf引用的體積。 (這樣做會覆蓋在默認情況下是有2個配置文件,所以我在Dockerfile使用COPY命令,而不是僅僅增加一個配置文件)文件不使其進入容器:

[email protected]:/etc/mysql/conf.d# cat my.cnf 
[mysqld] 
user=root 

一個進一步的要求從MySql手冊是將--user=root參數添加到mysqld。官方的MySql映像通過它的CMD調用mysqld,所以我在我的Dockerfile中覆蓋它。我的CMD命令確實運行(這是在2個地方運行MySQL官方形象的entrypoint script):

# ps aux 
USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
mysql  1 0.1 2.8 1452788 472756 ?  Ssl 14:24 0:01 mysqld --user=root 

注意的mysqld有--user = I提供root的命令,但正在運行的MySQL用戶,不作爲根。

這裏是我的全部Dockerfile:

FROM mysql:5.6 
VOLUME ["/var/lib/mysql-files"] 
COPY ["my.cnf", "/etc/mysql/conf.d"] 
CMD ["mysqld", "--user=root"] 

我只能猜測,爲什麼它沒有作爲root運行的是,他們的mysql圖像的入口點腳本更改到mysql用戶運行前:

# allow the container to be started with `--user` 
if [ ...blah... -a "$(id -u)" = '0' ]; then 
    ...blah... 
    exec gosu mysql "$BASH_SOURCE" "[email protected]" 
fi 

的上面的代碼片段基本上說,如果用戶是root用戶,那麼以mysql用戶身份運行提供的參數(本例中爲CMD +參數)。

以root身份運行mysqld只需不支持由官方的MySql Docker映像?

回答

0

注:這是如何運行mysqld進程爲SO的root用戶,而不是如何獲取root用戶的MySQL。

我不知道是否存在更好的方法但這個工程。


查看官方entrypoint.sh,它似乎已經不支持換款默認mysql用戶 我意識到如何MySQL的root身份運行的,但你必須已經初始化的數據目錄。

步驟1)以初始化卷啓動一個正常的MySQL(MySQL的entrypoint.sh將這樣做的工作):

docker run \ 
    --rm \ 
    -v $(pwd)/mysql/:/var/lib/mysql \ 
    -e MYSQL_ROOT_PASSWORD="abc" \ 
mysql:5.6 

步驟2)停止並刪除該容器:

docker stop <container-id> 

步驟3)根據已創建的數據目錄再次啓動一個新的mysql進程,但是這次避免運行官方mysql入口點:

docker run \ 
    -v $(pwd)/mysql/:/var/lib/mysql \ 
    -e MYSQL_ROOT_PASSWORD="abc" \ 
    --entrypoint mysqld \ 
mysql:5.6 \ 
    --user root 

步驟4)檢查它:

▶ docker exec -it 4add4d065c3e bash 
[email protected]:/# ps aux 
USER  PID %CPU %MEM VSZ RSS TTY  STAT START TIME COMMAND 
root   1 2.8 23.0 1314864 471104 ?  Ssl 15:12 0:00 mysqld --user root 
root  28 3.0 0.1 20248 3040 ?  Ss 15:12 0:00 bash 
root  34 0.0 0.1 17500 2068 ?  R+ 15:12 0:00 ps aux 
相關問題