gpt4 book ai didi

docker - 在Docker容器的镜像构建上设置值

转载 作者:行者123 更新时间:2023-12-02 21:25:16 25 4
gpt4 key购买 nike

假设我在Fedora中以reynierpm身份登录,我将从Dockerfile构建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>

作为构建过程的一部分,此文件被复制到镜像上的正确位置。

是否可以从主机获取登录的用户名并动态设置为该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构建中将其插入/设置为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"]

更新:尝试使用args 时构建失败

按照@Elton的建议,我将此行添加到 run文件中:
sed -i "s/#ServerName www.example.com/$USER_NAME.dev/g" /etc/apache2/sites-available/000-default.conf

然后尝试将图像构建为:
docker build --build-arg USER_NAME=$(whoami) -t dev-php55 .

但是失败并显示以下消息:

One or more build-args [USER_NAME] were not consumed, failing build.



怎么了?

最佳答案

如果要在镜像中固定该值,最好的选择是使用build参数,并在Dockerfile中进行一些文本替换:

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

然后在构建时传递 whoami:
docker build --build-arg USER_NAME=$(whoami) -t temp .

build参数将覆盖Dockerfile中的默认值,因此您的镜像具有真实的生成器用户名:
docker run temp cat /builder.txt                                                                                                                   
Built by: ubuntu

编辑: build arguments仅在构建过程中可用作环境变量。最终生成的图像中都不存在变量或值。因此,您只能在 RUN之类的构建指令中使用参数值。

关于docker - 在Docker容器的镜像构建上设置值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39639999/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com