我有下一个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吗?我不想自动安装
答案 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 image和official mysql image
用于链接容器我建议使用docker-compose