【发布时间】:2016-09-18 20:58:39
【问题描述】:
如果不创建我自己的基本映像,我不确定这是否可行,但我在我们的服务器上使用 /etc/environment 中的环境变量,并且通常通过执行以下操作使 apache 可以访问它们:
$ printf "HTTP_VAR1=var1-value\n\
HTTP_VAR2=var2-value"\
>> /etc/environment
$ mkdir /usr/lib/systemd/system/httpd.service.d
$ printf "[Service]\n\
EnvironmentFile=/etc/environment"\
> /usr/lib/systemd/system/httpd.service.d/environment.conf
$ systemctl daemon-reload
$ systemctl restart httpd
$ reboot
然后,这些变量可在对getenv('HTTP_VAR1'); 等的任何 PHP 调用中使用。但是,在从 docker 文件运行它时,我在 systemctl 命令上遇到 dbus 错误。如果没有 systemctl 命令,apache 似乎无法使用这些变量,因为新的 EnvironmentFile 指令似乎没有生效。我的docker文件sn-p:
FROM centos/httpd:latest
RUN printf "HTTP_VAR1=var1-value\n\
HTTP_VAR2=var2-value"\
>> /etc/environment
RUN mkdir /usr/lib/systemd/system/httpd.service.d &&\
printf "[Service]\n\
EnvironmentFile=/etc/environment"\
> /usr/lib/systemd/system/httpd.service.d/environment.conf
RUN systemctl daemon-reload &&\
systemctl restart httpd
COPY entrypoint.sh /entrypoint.sh
【问题讨论】:
-
尝试删除“RUN systemctl daemon-reload &&\ systemctl restart httpd”..
-
就是这样,如果我删除它们,我的 EnvironmentFile 似乎不会被 apache 加载。在实时服务器上,我必须运行这两个命令才能使 EnvironmentFile 生效。
-
好的..通常 docker 镜像的软件配置不同..您可能需要查看 httpd 镜像以了解如何注入变量a
-
那么我是否相信您认为添加 EnvironmentFile 应该在没有守护程序重新加载的情况下被拾取?因为在真实服务器上肯定不会发生这种情况,所以您必须在此之后重新加载并重新加载 apache。不知道为什么 docker 服务器会有所不同。
-
docker 环境中唯一的区别是进程在前台运行,因此某些配置可能会有所不同。但它不应该有太大的不同。查看基础镜像的 dockerfile 应该会给你很好的线索。
标签: apache docker centos dockerfile systemd