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

将Docker容器部署到ECS Fargate时启动脚本找不到的问题求助

问题分析与解决方案

问题根源

你遇到的start.sh not found报错,核心原因是EFS卷挂载覆盖了容器镜像中原有的目录:
你的ECS配置里将EFS卷挂载到了/srv/src/enketo_express/,这会完全替换容器镜像里该目录下的所有内容。而EFS根目录指向的/volumes/enketo/config中,并没有setup/docker/start.sh这个路径,因此启动时找不到脚本。

可行解决方案

1. 调整挂载路径(推荐)

不要将EFS挂载到整个/srv/src/enketo_express/目录,只挂载需要自定义配置的子目录。比如Enketo通常仅需挂载config目录来覆盖配置文件:
修改容器定义中的mountPoints:

"mountPoints": [
    {
        "sourceVolume": "config",
        "containerPath": "/srv/src/enketo_express/config",
        "readOnly": false
    }
],

这样既保留了镜像中原有的setup/docker/start.sh脚本,又能使用EFS里的自定义配置。

2. 同步启动脚本到EFS

如果必须挂载整个/srv/src/enketo_express/目录,需要把镜像中的setup/docker/start.sh文件同步到EFS的/volumes/enketo/config/setup/docker/路径下,同时确保文件拥有执行权限:

# 本地从镜像复制启动脚本目录
docker run --rm -v $(pwd):/tmp enketo/enketo-express:6.0.0 cp -r /srv/src/enketo_express/setup /tmp/
# 将复制的setup目录上传到EFS对应路径(可通过EC2挂载EFS后复制,或使用AWS CLI工具)

3. 使用镜像默认启动命令

查看该镜像的Dockerfile可知,默认启动流程通过docker-entrypoint.sh完成,无需手动指定command。你可以尝试移除容器定义中的entryPoint和command配置,让容器使用镜像默认的启动逻辑,避免手动指定路径引发的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:27:28