使用AWS CodeDeploy部署Python Docker应用时遇Dockerfile缺失错误
解决方案
核心问题
CodeDeploy执行钩子脚本时,默认工作目录是/opt/codedeploy-agent/deployment-root/[部署组ID]/[部署ID]/deployment-archive,而非你指定的应用目标目录。你的docker build .命令在这个默认目录执行,但Dockerfile并未同步到此处,导致找不到文件。
具体修复步骤
修正appspec.yml的文件同步规则
避免用source: /同步整个根目录,改为明确同步所需文件到目标目录,防止不必要的文件覆盖:version: 0.0 os: linux files: - source: ./Dockerfile destination: /home/ec2-user/Deployment/ - source: ./requirements.txt destination: /home/ec2-user/Deployment/ - source: ./api.py destination: /home/ec2-user/Deployment/ - source: ./scripts/ destination: /home/ec2-user/Deployment/scripts/ file_exists_behavior: OVERWRITE hooks: ApplicationStop: - location: scripts/kill_container.sh timeout: 300 runas: ec2-user BeforeInstall: - location: scripts/install_dependencies.sh timeout: 300 runas: ec2-user ApplicationStart: - location: scripts/start_container.sh timeout: 300 runas: ec2-user修改start_container.sh,切换到应用目录执行构建
在执行docker build前,显式切换到你的应用部署目录,确保Dockerfile能被找到:#!/usr/bin/env bash echo "Starting container===" set -e # 切换到应用部署目录 cd /home/ec2-user/Deployment echo $PWD pwd ls # 构建镜像并后台运行容器 docker build -t python-api-docker . docker run -d -p 5000:5000 python-api-docker注意:添加
-d参数让容器后台运行,否则CodeDeploy会因进程阻塞无法标记部署成功。验证文件同步结果
在install_dependencies.sh中添加查看目标目录的命令,确认Dockerfile等文件是否被正确同步:#!/usr/bin/env bash set -e echo "=====================================================" echo $PWD pwd ls # 检查目标目录的文件 ls /home/ec2-user/Deployment/
额外注意事项
- 确保EC2实例上的
ec2-user对/home/ec2-user/Deployment目录有读写权限。 - 确认codedeploy-agent服务运行正常,可通过
sudo service codedeploy-agent status检查。
内容的提问来源于stack exchange,提问作者D555
相关产品推荐
相关产品推荐

