2016-07-13 41 views
6

ho il prossimo dockerfile:MySQL in Docker congelati a password di root config

FROM ubuntu:16.04 
RUN apt-get update && apt-get upgrade -y && apt-get install -y apache2 mysql-server mysql-client 

Dopo, Docker costruire mi chiede la password di root:

While not mandatory, it is highly recommended that you set a password for the 
MySQL administrative "root" user. 

If this field is left blank, the password will not be changed. 

New password for the MySQL "root" user: 

inserisco la password, ma, semplicemente rimane in quello stato.

Posso installare mysql in questo modo ?, non voglio installarlo automaticamente

risposta

1

Il modo Docker è "un contenitore per un processo". Hai bisogno di un contenitore per apache e uno per mysql. È possibile utilizzare official php image e official mysql image

per il collegamento dei contenitori vi consiglio l'uso finestra mobile-comporre

+0

ho pensato di utilizzare Supervisor ... quale opzione è migliore? docker-compose o supervisore? – alvarezsh

+1

ci siamo abituati a supervisore più tardi, ma ora usiamo contenitori separati. Dà alcuni vantaggi. Possiamo utilizzare immagini e aggiornamenti ufficiali, aggiornare solo una parte del cluster, rollback veloce alla versione precedente del contenitore. –

+0

Questo è davvero molto interessante, provo la docker-compose – alvarezsh

0

Hum, penso che il modo migliore è quello di tirare la Official mysql image e collegarlo nel contenitore applicazione.

Spero che aiuti.

17

La risposta accettata può essere vero in un certo senso astratto, ma è del tutto irrilevante per la questione a portata di mano. È necessario un modo per specificare la password staticamente. E a meno che tu non stia usando il official image, avrai bisogno di seguire o meno il dogma "un processo, un contenitore".

La risposta here racconta come, ma si lascia fuori un ambiente chiave: avete ancora dire debconf di utilizzare il front-end Noninteractive, come descritto here.

Ecco un esempio di funzionamento Dockerfile basato su quanto sopra.

FROM ubuntu:latest 
MAINTAINER Jonathan Strange <[email protected]> 
RUN apt-get update \ 
    && apt-get install -y apt-utils \           
    && { \ 
     echo debconf debconf/frontend select Noninteractive; \ 
     echo mysql-community-server mysql-community-server/data-dir \ 
      select ''; \ 
     echo mysql-community-server mysql-community-server/root-pass \ 
      password 'JohnUskglass'; \ 
     echo mysql-community-server mysql-community-server/re-root-pass \ 
      password 'JohnUskglass'; \ 
     echo mysql-community-server mysql-community-server/remove-test-db \ 
      select true; \ 
    } | debconf-set-selections \ 
    && apt-get install -y mysql-server apache2 python python-django \ 
     python-celery rabbitmq-server git 

Questo non è troppo terribilmente diverso da quello che il official Dockerfile fa - anche se gestire la configurazione di password effettiva un po 'diverso.

Alcune persone hanno avuto successo setting the DEBIAN_FRONTEND variabile di ambiente noninteractive, in questo modo:

ENV DEBIAN_FRONTEND noninteractive 

Tuttavia, ciò non sembra funzionare in tutti i casi. L'utilizzo di debconf ha dimostrato di essere più affidabile per me.

+0

All'interno del contenitore. Non ho potuto avviare la console mysql usando mysql -u root -proot dando ERROR 2002 (HY000): Impossibile connettersi al server MySQL locale tramite socket '/var/run/mysqld/mysqld.sock' (2). –

+0

@ Vinujan.S questo è un altro problema.Se non è già stato chiesto come domanda su questo sito, dovresti chiederlo come una nuova domanda. – senderle

+0

Ho risolto il problema in seguito. Ma ho cambiato il meccanismo per avere un contenitore separato per mysql. Grazie per la risposta. lo apprezzo davvero. –

2

Proprio in risposta caso di sendarle non era molto chiaro, aggiungere ambiente DEBIAN_FRONTEND come indicato di seguito per il vostro Dockerfile:

FROM ubuntu:latest 

ENV DEBIAN_FRONTEND noninteractive 

RUN apt-get update \ 
    && apt-get install -y mysql-server mysql-client libmysqlclient-dev 
    --no-install-recommends \ 
    && apt-get clean \ 
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 
+0

All'interno del contenitore. Non ho potuto avviare la console mysql usando mysql -u root -proot con ERROR 2002 (HY000): Impossibile connettersi al server MySQL locale tramite socket '/var/run/mysqld/mysqld.sock' (2). –