部署Docker化应用到Elastic Beanstalk遇volume name过短错误求助
解决Elastic Beanstalk部署Docker应用时的卷名过短错误
从你的错误日志里一眼就能锁定问题核心:create .: volume name is too short, names should be at least two alphanumeric characters——这个.就是触发错误的元凶。
问题根源
你的Dockerrun.aws.json文件中,volumes部分的code卷配置了sourcePath: ".":
{ "host": { "sourcePath": "." }, "name": "code" }
Elastic Beanstalk在处理ECS多容器部署时,会把这个.解析为要创建的卷的名称,而Docker要求卷名至少包含两个字母数字字符,直接导致容器创建失败。
另外你提到的Windows路径解析问题在这里不相关,因为EB的ECS运行环境是Linux实例,.env里的COMPOSE_CONVERT_WINDOWS_PATHS=1对部署没有作用。
修复方案
根据你的需求,推荐两种修复方式:
方案1:移除不必要的代码卷挂载(优先推荐)
既然你的web服务已经使用了预先构建好的镜像dockerhubstuff/test:latest,代码应该已经打包在镜像里了,完全不需要通过宿主卷挂载代码。你可以直接修改Dockerrun.aws.json:
- 删除
volumes数组中code卷的条目 - 删除web容器定义里的
mountPoints数组(因为不再需要挂载这个卷)
修改后的web容器配置示例:
{ "command": [ "bash", "-c", "python /code/manage.py makemigrations && python /code/manage.py migrate && python /code/manage.py runserver 0.0.0.0:8000" ], "environment": [ { "name": "RDS_DB_NAME", "value": "db1" }, { "name": "RDS_USERNAME", "value": "name" }, { "name": "RDS_HOSTNAME", "value": "db" }, { "name": "RDS_PASSWORD", "value": "password" }, { "name": "RDS_PORT", "value": "5432" } ], "essential": true, "memory": 64, "image": "dockerhubstuff/test:latest", "name": "web", "portMappings": [ { "containerPort": 8000, "hostPort": 8000 } ] }
方案2:修改为合法的宿主路径
如果你确实需要挂载宿主目录(比如用于存储日志或临时文件),把sourcePath从.改成一个合法的、至少2字符的路径,比如EB实例默认的应用目录/var/app/current/code:
"volumes": [ { "host": { "sourcePath": "postgres_data" }, "name": "Postgres_Data" }, { "host": { "sourcePath": "/var/app/current/code" }, "name": "code" } ]
最后步骤
修改完成后,重新打包包含Dockerrun.aws.json的压缩包,上传到Elastic Beanstalk重新部署即可。
内容的提问来源于stack exchange,提问作者reddd__1
相关产品推荐
相关产品推荐

