2015-08-21 1 views
4

При установке mysql в ubuntu с apt-get install mysql-server во время установки запрашиваются имя пользователя и пароль mysql.Как установить mysql имя пользователя в файле docker

Но при использовании файла docker для создания образа mysql, как можно указать имя пользователя и пароль?

Я попытался с помощью dockerfile следующим образом:

FROM ubuntu:14.04 
apt-get update 
apt-get install -y mysql-server 

Но при создании образа, я узнал, что мы можем войти в систему в MySQL без имени пользователя и пароля.

Как установить имя пользователя и пароль, когда я использую dockerfile для создания моих изображений?

ответ

9

Если вы посмотрите на официальном Docker MySQL изображения Dockerfile, вы узнаете, как они это сделали, используя debconf-set-selections.

Соответствующие инструкции:

RUN { \ 
     echo mysql-community-server mysql-community-server/data-dir select ''; \ 
     echo mysql-community-server mysql-community-server/root-pass password ''; \ 
     echo mysql-community-server mysql-community-server/re-root-pass password ''; \ 
     echo mysql-community-server mysql-community-server/remove-test-db select false; \ 
    } | debconf-set-selections \ 
    && apt-get update && apt-get install -y mysql-server 

debconf-set-selections является инструментом, который позволяет подготовить ответы на вопросы, которые будут заданы во время последующей установки.

+2

Спасибо! Я обнаружил, что для этого нужна дополнительная строка, как описано [здесь] (https://github.com/phusion/baseimage-docker/issues/58#issuecomment-47995343). Полный пример с проверкой сборки - [здесь] (http://stackoverflow.com/a/39376045/577088). – senderle

2

tutumcloud/mysql

Dockerfile

ADD run.sh /run.sh 

ENV MYSQL_USER=admin \ 
    MYSQL_PASS=**Random** \ 
    ON_CREATE_DB=**False** \ 
    REPLICATION_MASTER=**False** \ 
    REPLICATION_SLAVE=**False** \ 
    REPLICATION_USER=replica \ 
    REPLICATION_PASS=replica 

run.sh

StartMySQL() 
{ 
    /usr/bin/mysqld_safe ${EXTRA_OPTS} > /dev/null 2>&1 & 
    # Time out in 1 minute 
    LOOP_LIMIT=60 
    for ((i=0 ; ; i++)); do 
     if [ ${i} -eq ${LOOP_LIMIT} ]; then 
      echo "Time out. Error log is shown as below:" 
      tail -n 100 ${LOG} 
      exit 1 
     fi 
     echo "=> Waiting for confirmation of MySQL service startup, trying ${i}/${LOOP_LIMIT} ..." 
     sleep 1 
     mysql -uroot -e "status" > /dev/null 2>&1 && break 
    done 
} 
CreateMySQLUser() 
{ 
    if [ "$MYSQL_PASS" = "**Random**" ]; then 
     unset MYSQL_PASS 
    fi 

    PASS=${MYSQL_PASS:-$(pwgen -s 12 1)} 
    _word=$([ ${MYSQL_PASS} ] && echo "preset" || echo "random") 
    echo "=> Creating MySQL user ${MYSQL_USER} with ${_word} password" 

    mysql -uroot -e "CREATE USER '${MYSQL_USER}'@'%' IDENTIFIED BY '$PASS'" 
    mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO '${MYSQL_USER}'@'%' WITH GRANT OPTION" 
    echo "=> Done!" 
    echo "========================================================================" 
    echo "You can now connect to this MySQL Server using:" 
    echo "" 
    echo " mysql -u$MYSQL_USER -p$PASS -h<host> -P<port>" 
    echo "" 
    echo "Please remember to change the above password as soon as possible!" 
    echo "MySQL user 'root' has no password but only allows local connections" 
    echo "========================================================================" 
} 
StartMySQL 
CreateMySQLUser 

..... полезно для и

+1

, пожалуйста, объясните свой код –

+0

В целом, будьте очень осторожны с 'mysql -uroot -e" ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ НА *. * TO '$ {MYSQL_USER}' @ '%' WITH GRANT OPTION "' – Drew

+0

по двум причинам. вы просто дали им права на все (ну, это единственная причина, по которой вам нужно) ... но также, будьте осторожны с WITH GRANT OPTION – Drew