MySQL in Docker frozen at root password config

2019-06-19 02:07发布

I have the next dockerfile:

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

After, Docker build asking me the password 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:

I enter the password, but, simply it stays in that state.

Can I install mysql this way?, I do not want to install it automatically

3条回答
Lonely孤独者°
2楼-- · 2019-06-19 02:30

Just in case sendarle's answer was not very clear, add environment DEBIAN_FRONTEND such as shown below to your 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/*
查看更多
男人必须洒脱
3楼-- · 2019-06-19 02:31

The accepted answer may be true in some abstract sense, but it's completely irrelevant to the matter at hand. You need a way to specify the password statically. And unless you are using the official image, you'll need that whether or not you follow the "one process, one container" dogma.

The answer here tells how, but it leaves out a key setting: you still have to tell debconf to use the Noninteractive front-end, as described here.

Here's an example of a working Dockerfile based on the above.

FROM ubuntu:latest
MAINTAINER Jonathan Strange <jstrange@norrell.edu>
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

This is not too terribly different from what the official Dockerfile does -- though they handle the actual password config somewhat differently.

Some people have had success by setting the DEBIAN_FRONTEND environment variable to noninteractive, like so:

ENV DEBIAN_FRONTEND noninteractive

However, that doesn't seem to work in all cases. Using debconf directly has proven more reliable for me.

查看更多
唯我独甜
4楼-- · 2019-06-19 02:46

Docker way is "one container for one process". You need one container for apache and one for mysql. You can use official php image and official mysql image

for linking the containers i recommend use docker-compose

查看更多
登录 后发表回答