You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker:如何在ArangoDB镜像中运行双命令,其中arangod依赖ENTRYPOINT?

为ArangoDB镜像启用Cron功能的正确实现

你的配置执行失败的原因是:CMD ["arangod", "/usr/sbin/crond -f"]会把/usr/sbin/crond -f当作arangod的参数传递给ENTRYPOINT脚本,而arangod会将其识别为数据库目录路径,自然无法正常启动。

要同时运行crond和arangod(依赖原ENTRYPOINT脚本),可以采用以下两种可靠方案:

方案一:修改原ENTRYPOINT脚本

原镜像的/entrypoint.sh负责初始化环境并启动arangod,我们可以在其中加入启动crond的逻辑:

  1. 编写修改后的entrypoint.sh(基于原镜像脚本):
#!/bin/sh
# ... 保留原entrypoint.sh的所有初始化逻辑 ...

# 后台启动crond(-b参数让crond在后台运行,不阻塞后续流程)
/usr/sbin/crond -b

# 执行原启动命令(即CMD传递的参数,默认是arangod)
exec "$@"
  1. 编写Dockerfile:
FROM arangodb:3.10.3

# 若镜像未预装cron,执行安装(alpine基础镜像通常已包含crond,可根据实际情况调整)
RUN apk add --no-cache cron

# 替换原entrypoint脚本
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

EXPOSE 8529
CMD ["arangod"]

方案二:新增启动脚本,通过ENTRYPOINT间接调用

无需修改原entrypoint脚本,新增一个启动脚本协调crond和arangod的启动:

  1. 编写start.sh启动脚本:
#!/bin/sh
# 后台启动crond
/usr/sbin/crond -b

# 调用原启动命令(继承ENTRYPOINT的参数传递逻辑)
exec "$@"
  1. 编写Dockerfile:
FROM arangodb:3.10.3

RUN apk add --no-cache cron

# 添加启动脚本
COPY start.sh /start.sh
RUN chmod +x /start.sh

EXPOSE 8529
# 让ENTRYPOINT调用start.sh,再传递arangod命令
CMD ["/start.sh", "arangod"]

两种方案的核心逻辑都是:让crond在后台运行,同时保证arangod在前台运行(容器需要一个前台进程才能保持存活)。

内容的提问来源于stack exchange,提问作者Bogdan Timofeev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:32:57