首先,我知道不要以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映像?