设置Docker容器的图像构build值

假设我在Fedora上以reynierpmlogin,并且reynierpm构build一个Docker镜像。 该图像将包含一个LAMP环境。 我有一个Apache虚拟主机(VH)默认文件,如下所示:

 <VirtualHost *:80> #ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /var/www> AllowOverride All Require all granted </Directory> ErrorLog /dev/stdout CustomLog /dev/stdout combined </VirtualHost> 

作为构build过程的一部分,该文件被复制到图像上的适当位置。

我可以从主机获取login的用户名,并dynamic地设置到这个VH? 最后我想得到以下结果:

 <VirtualHost *:80> ServerName reynierpm.dev ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /var/www> AllowOverride All Require all granted </Directory> ErrorLog /dev/stdout CustomLog /dev/stdout combined </VirtualHost> 

我知道,我可以从bash中使用$(whoami)获取当前用户的值,但是如何在Docker构build中将其插入/设置为VH文件?

这是Dockerfile的内容:

 FROM ubuntu:14.04.5 MAINTAINER Me <myemail@gmail.com> ARG USER_NAME=unknown VOLUME ["/var/www"] RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive \ apt-get install -y software-properties-common && \ apt-get update && \ apt-get install -y \ apache2 \ php5 \ php5-cli \ libapache2-mod-php5 \ php5-gd \ php5-json \ php5-mcrypt \ php5-mysql \ php5-xdebug \ php5-curl \ php5-memcached \ php5-mongo \ zend-framework \ mc \ nano # Copy default virtual host file. COPY /config/apache2_vhost/apache_default /etc/apache2/sites-available/000-default.conf COPY run /usr/local/bin/run RUN chmod +x /usr/local/bin/run RUN a2enmod rewrite EXPOSE 80 EXPOSE 9001 CMD ["/usr/local/bin/run"] 

更新:尝试使用参数时生成失败

在@Eltonbuild议之后,我将这一行添加到run文件中:

 sed -i "s/#ServerName www.example.com/$USER_NAME.dev/g" /etc/apache2/sites-available/000-default.conf 

然后尝试将图像构build为:

 docker build --build-arg USER_NAME=$(whoami) -t dev-php55 . 

但是失败的消息如下:

一个或多个构build参数[USER_NAME]未被使用,构build失败。

怎么了?

如果你想在图像中修正这个值,最好的select是使用一个构build参数,并在Dockerfile中做一些文本replace:

 FROM ubuntu ARG USER_NAME=unknown RUN echo Built by: $USER_NAME > /builder.txt 

然后当你build立时传递你的whoami

 docker build --build-arg USER_NAME=$(whoami) -t temp . 

构build参数会覆盖Dockerfile中的默认值,以便您的映像具有真正的构build器用户名:

 docker run temp cat /builder.txt Built by: ubuntu 

编辑: 构build参数只能在生成过程中作为环境variables。 最终构build的图像中不存在variables或值。 所以你只能使用像RUN这样的构build指令中的参数值。