Docker 如何在默认入口点之前执行命令?
我在nginx alpine one上创建了一个docker图像。 我知道,在开始时,nginx映像读取一些配置文件并启动服务器 配置文件(我可以从中看到)读取存储在/etc/nginx中的配置 在实际启动脚本之前,我想对该配置执行一些运行时操作。此配置基于我将在部署描述符中设置的环境变量 我知道我可以简单地覆盖脚本,但是如果在以后的版本中他们更改了它呢?我也必须不断更新它 那么,是否有可能:Docker 如何在默认入口点之前执行命令?,docker,nginx,Docker,Nginx,我在nginx alpine one上创建了一个docker图像。 我知道,在开始时,nginx映像读取一些配置文件并启动服务器 配置文件(我可以从中看到)读取存储在/etc/nginx中的配置 在实际启动脚本之前,我想对该配置执行一些运行时操作。此配置基于我将在部署描述符中设置的环境变量 我知道我可以简单地覆盖脚本,但是如果在以后的版本中他们更改了它呢?我也必须不断更新它 那么,是否有可能: 执行一些自定义shell指令 是否将命令赋给默认图像入口点 您可以提供一个新的入口点,在默认入口点之前
您可以提供一个新的入口点,在默认入口点之前运行您想要的任何步骤。听起来您只想在配置文件中插入一些环境变量,这样您就可以在映像构建中通过
运行步骤来实现这一点。如果我没有误解您的要求,您的问题涉及以下两点:
您需要根据运行时环境变量更改一些配置,只有在您运行容器时,该变量才会出现
您希望为1执行操作,然后将控制传递给默认入口点。同时,您不想更改默认的entrypoint.sh
,因为您担心它以后会更改。更改此代码确实很难维护
然后,我建议:将定制的docker entrypoint.sh
包装起来,调用defaultentrypoint.sh
。下面是想法,只是一个例子:
- 原始情况:
Dockerfile:
FROM alpine
...
ENTRYPOINT ./entrypoint.sh
# do default entrypoint things here
FROM alpine
ENV myvariable=""
...
ENTRYPOINT ./docker-entrypoint.sh $myvariable
# change the configurations base on the first parameter: $1
# change configure code here
# call default entrypoint.sh
./entrypoint.sh
entrypoint.sh:
FROM alpine
...
ENTRYPOINT ./entrypoint.sh
# do default entrypoint things here
FROM alpine
ENV myvariable=""
...
ENTRYPOINT ./docker-entrypoint.sh $myvariable
# change the configurations base on the first parameter: $1
# change configure code here
# call default entrypoint.sh
./entrypoint.sh
- 更新的解决方案可满足您的要求:
Dockerfile:
FROM alpine
...
ENTRYPOINT ./entrypoint.sh
# do default entrypoint things here
FROM alpine
ENV myvariable=""
...
ENTRYPOINT ./docker-entrypoint.sh $myvariable
# change the configurations base on the first parameter: $1
# change configure code here
# call default entrypoint.sh
./entrypoint.sh
docker entrypoint.sh:
FROM alpine
...
ENTRYPOINT ./entrypoint.sh
# do default entrypoint things here
FROM alpine
ENV myvariable=""
...
ENTRYPOINT ./docker-entrypoint.sh $myvariable
# change the configurations base on the first parameter: $1
# change configure code here
# call default entrypoint.sh
./entrypoint.sh
使用上述解决方案,您可以基于环境myvariable
在自定义docker entrypoint.sh
中配置代码。同时,即使以后原始图像中的entrypoint.sh
发生更改,它对您来说仍然是透明的,就像您刚才所说的那样,这个脚本没有代码更改
现在我有一个问题:您的解决方案似乎是正确的,但我正在搜索的文件似乎不存在于容器中……是否有任何命令可以找到它?您是指哪个文件?