【发布时间】:2019-02-02 10:40:34
【问题描述】:
在我的 github 上,我正在从一个 debian 最小 docker 映像创建一个小分支。它实际上是在以前的基础上构建的 5 个包:
debian-base-minimal
debian-base-standard
debian-base-security
debian-base-apache
debian-base-apache-php
在 debian-base-apache 上,我想获得一个工作环境变量,我可以稍后在 docker-compose 文件中定义它。环境应该做什么?
如果通过 docker-compose 定义,它应该在 /etc/apache2/apache2.conf 的末尾写入 ServerName $SERVER_NAME 以设置全局服务器名称。如果为空,则不应写入新行。
但是为什么它在空的时候什么也不写呢? Cauz 在将 Dockerfile 构建到映像时不应包含 SERVER_NAME。
我已经尝试过类似的方法:
echo "ServerName $SERVER_NAME" >> /etc/apache2/apache2.conf
在我的 040-debian-base-apache 文件上。但是在构建它所写的ServerName 时,因为我没有定义一个值并且它使用null。如果我在 Dockerfile (ENV SERVER_NAME=127.0.0.1) 中设置默认值,它会使用 127.0.0.1 构建映像,并且我无法通过变量更改 127.0.0.1,因为变量已经填充了该值。
在 Dockerfile 中定义 ENV SERVER_NAME=127.0.0.1 的建筑物的输出(实际上不在 repo 中):
[...]
+ echo 'ServerName 127.0.0.1'
+ /etc/init.d/apache2 stop
Stopping Apache httpd web server: apache2.
ok.
+ /etc/init.d/apache2 start
Starting Apache httpd web server: apache2.
ok.
[...]
没关系,如果有默认的 127.0.0.1 因为 apache 可以启动。但我现在无法在 docker-compose.yml 中定义它,因为它的硬编码 127.0.0.1 而不是变量的输出。
关于在 Dockerfile 中没有定义 ENV 的建筑物的输出(实际上是 repo 版本):
[...]
+ echo 'ServerName '
+ /etc/init.d/apache2 stop
Stopping Apache httpd web server: apache2.
+ /etc/init.d/apache2 start
Starting Apache httpd web server: apache2 failed!
The apache2 configtest failed. ... (warning).
Output of config test was:
AH00526: Syntax error on line 228 of /etc/apache2/apache2.conf:
ServerName takes one argument, The hostname and port of the server
[...]
谁能帮我解决这个问题?很高兴了解它是如何工作的。
非常感谢。
【问题讨论】:
-
请分享到您的 github 分支的链接,以便我们可以看到您在 Dockerfile 和 docker compose 文件中的内容。请将其添加到问题中,并分享您用于运行它们的命令。
-
正如我在评论中所说,请将链接添加到您的问题以及用于运行它们的命令。
-
@Exadra37 我编辑了我的顶级帖子,其中包含更多信息、链接、输出以及我使用哪个文件构建所有东西。你还需要什么别的吗?很抱歉,但我不知道你对
add the link to your question的明确含义