如何在执行脚本时使httpd docker映像保持活动状态

如何在执行脚本时使httpd docker映像保持活动状态,docker,dockerfile,Docker,Dockerfile,我已经基于httpd:2.4创建了一个imaged,它正在工作。我必须添加一个脚本,因为我需要对ENTRYPOINT执行一些操作,但现在当容器运行时,它会立即退出 在Nodes容器上,我在脚本中运行node index.js,使其保持活动状态,而在这里它退出。我认为这是因为它执行了脚本,然后docker可以退出(它不知道图像要做什么) 这是我的文件,然后是startup.sh dockerfile startup.sh envsubst\$parameters\$u毫秒,\$server,\$c

我已经基于httpd:2.4创建了一个imaged,它正在工作。我必须添加一个脚本,因为我需要对ENTRYPOINT执行一些操作,但现在当容器运行时,它会立即退出

在Nodes容器上,我在脚本中运行node index.js,使其保持活动状态,而在这里它退出。我认为这是因为它执行了脚本,然后docker可以退出(它不知道图像要做什么)

这是我的文件,然后是startup.sh

dockerfile startup.sh
envsubst\$parameters\$u毫秒,\$server,\$checkServerConnectionInterval,\$detailRefreshInterval,\$customMainPoputPerInterval,\$customTimerSectionTimerInterval,\$machineParametersTimerInterval,\$workingTimeInterval,\$ioUnitResourcesInterval,\$LoggedUserInterval<./params/params.json.empty>/params/params.json>
有什么建议吗?
提前感谢

如果要用自己的脚本替换原始入口点,并且希望保留与原始入口点相同的功能,则需要将原始命令添加到入口点的末尾

例如,apache的自定义入口点:

# entrypoint
#!/usr/bin/env bash
echo "===> Doing some important things and then starting the server"
httpd-foreground
这将很好地与此Dockerfile配合使用:

# Dockerfile
FROM httpd:2.4
COPY entrypoint /usr/local/bin/entrypoint
RUN chmod +x /usr/local/bin/entrypoint
ENTRYPOINT ["entrypoint"]

请参阅和。

如果Dockerfile具有
入口点,则该入口点是容器运行的唯一进程。如果它还有一个
CMD
,则插入入口点

标准使用
ENTRYPOINT
进行首次设置,然后运行
CMD
。为此,脚本需要以
exec“$@”
结束,以运行作为参数传递的命令

#/垃圾箱/垃圾箱
环境替代品。。。
执行官“$@”
如果在Dockerfile中指定
ENTRYPOINT
,则还需要指定
CMD
,即使基本图像中定义了
CMD
(请参见上面链接中的“注意”)。
ENTRYPOINT
声明必须使用JSON数组形式,否则
CMD
将丢失

所以我将Dockerfile的结尾稍微更改为

运行chmod+x startup.sh
入口点[”/startup.sh“]
CMD[“httpd前台”]
(有一件事是很常见的,尤其是在你开发一个图像的时候,那就是在已经构建的内部进行探索:

docker运行--rm myimage ls-l xxx
#为什么index.html是可执行的?
这种方法进行首次设置,然后运行命令,因此您将看到“真实”配置文件。如果将命令“烘焙”到入口点脚本中,则很难运行备用命令。)

# entrypoint
#!/usr/bin/env bash
echo "===> Doing some important things and then starting the server"
httpd-foreground
# Dockerfile
FROM httpd:2.4
COPY entrypoint /usr/local/bin/entrypoint
RUN chmod +x /usr/local/bin/entrypoint
ENTRYPOINT ["entrypoint"]