Docker中的MySQL冻结在root密码配置中

时间:2016-07-13 15:42:48

标签: mysql docker dockerfile

我有下一个dockerfile:

import Foundation

let locale = Locale(localeIdentifier: "fr_FR")
//let locale = Locale.current
let localeCurrencyCode = locale.object(forKey: Locale.Key.currencyCode) as! String
print(localeCurrencyCode) // prints "EUR"

之后,Docker构建问我密码root:

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

我输入密码,但只是保持该状态。

我可以这样安装mysql吗?我不想自动安装

3 个答案:

答案 0 :(得分:22)

接受的答案可能在某种抽象意义上是正确的,但它与手头的事情完全无关。您需要一种静态指定密码的方法。除非您使用的是official image,否则无论您是否遵循"一个流程,一个容器"教条。

答案here说明了这一点,但它没有提供关键设置:您仍然必须告诉debconf使用Noninteractive前端,如上所述here

以下是基于上述内容的Dockerfile工作示例。

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

这与official Dockerfile的做法并没有太大不同 - 尽管他们处理实际的密码配置有所不同。

有些人通过setting the DEBIAN_FRONTEND环境变量取得了noninteractive的成功,如下所示:

ENV DEBIAN_FRONTEND noninteractive

然而,这似乎并不适用于所有情况。直接使用debconf证明对我来说更可靠。

答案 1 :(得分:3)

为了防止sendarle的回答不是很清楚,请将以下所示的环境DEBIAN_FRONTEND添加到您的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/*

答案 2 :(得分:-1)

Docker方式是“一个进程的一个容器”。 你需要一个用于apache的容器和一个用于mysql的容器。 您可以使用official php imageofficial mysql image

用于链接容器我建议使用docker-compose