Docker Compose无法找到指定Dockerfile的问题求助
Docker容器构建启动问题修复方案
问题总结
在/tp4startingpoint/目录下通过startDocker.sh运行docker-compose时,出现两个核心问题:
- 系统提示无法找到
DockerfileBackend和DockerfileFrontend(文件实际存放在/project/docker/目录) - 出现镜像拉取权限警告(
pull access denied)
修复步骤
1. 修正Dockerfile路径配置
docker-compose中build字段的dockerfile路径需相对于context目录(此处context为项目根目录./),原配置中开头的./会导致路径解析错误。修改docker-compose.yml的build部分:
version: '3.8' # 替换过时的version为兼容版本,也可直接省略 services: memory_Backend: build: context: ./ dockerfile: project/docker/DockerfileBackend # 移除开头的./ image: memoryapi_ad_img volumes: - ./:/var/lib ports: - 15555:25555 memory_Frontend: build: context: ./ dockerfile: project/docker/DockerfileFrontend # 移除开头的./ image: memorywebsite_ad_img volumes: - ./:/var/lib ports: - 15556:25556
2. 镜像拉取警告说明
警告pull access denied是因为docker-compose会优先尝试拉取image字段指定的镜像(memoryapi_ad_img、memorywebsite_ad_img),但这些镜像不存在于公共Docker仓库。此警告不影响本地镜像构建,若想消除警告:
- 直接去掉
image字段,让docker-compose自动生成镜像名称 - 提前在本地构建好对应名称的镜像(本次场景无需操作,构建过程会自动创建)
3. 脚本与路径验证
确保startDocker.sh的工作目录是/tp4startingpoint/,脚本中的--project-directory .参数无需修改,可同步调整脚本提示文字为中文:
#!/bin/bash vol_name=memory_ad_vol api_cont_name=memoryapi_ad_cnt api_image_name=memoryapi_ad_img website_cont_name=memorywebsite_ad_cnt website_image_name=memorywebsite_ad_img echo "开始启动Docker中的API和网站服务" echo "API镜像名称: $api_image_name" echo "网站镜像名称: $website_image_name" echo "存储镜像和容器的卷名称: $vol_name" echo "API容器名称: $api_cont_name" echo "网站容器名称: $website_cont_name" ### 清理现有容器 echo "停止所有相关服务" docker-compose -f docker-compose.yml --project-directory . down ### 重新构建启动 echo "创建并启动服务" docker-compose -f docker-compose.yml --project-directory . up -d
验证修复
执行以下命令重新运行:
cd /tp4startingpoint/ chmod +x startDocker.sh run.sh ./startDocker.sh
此时docker-compose会正确找到project/docker/下的Dockerfile,完成镜像构建与容器启动,镜像拉取警告可忽略(若不需要可按上述方式消除)。
内容的提问来源于stack exchange,提问作者LADsy8
相关产品推荐
相关产品推荐

