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

docker build构建镜像正常,docker-compose提示找不到/GO/src/main目录

解决Docker Compose构建时stat /GO/src/main: no such file or directory的问题

嘿,从你描述的情况来看,单独用docker build能成功构建镜像,但Docker Compose一跑就报找不到/GO/src/main,这大概率是Compose的配置或者构建上下文出了问题——毕竟单独构建没问题,说明你的Dockerfile本身是能正常工作的。咱们一步步来排查解决:

1. 先确认Docker Compose的构建上下文

Docker Compose默认会把docker-compose.yml所在的目录当成构建上下文。如果你之前单独docker build是在项目根目录(就是存着Dockerfile和src文件夹的那个目录)执行的,但docker-compose.yml放在了子目录里,那构建时复制文件的路径就会出错,自然找不到目标文件。

  • 最省心的办法是把docker-compose.yml移到项目根目录,和Dockerfile、src文件夹同级
  • 如果必须放在其他目录,就在Compose的build字段里显式指定上下文路径,比如:
    version: "3.3"
    services:
      your-service-name:
        build:
          context: ../project-root  # 指向包含Dockerfile和src的项目根目录
          dockerfile: Dockerfile
    

2. 检查Compose服务配置里的路径冲突

错误提示的/GO/src/main和你Dockerfile里设置的/app完全不匹配,十有八九是Compose的服务配置里改了路径相关的设置:

  • 看看是不是不小心设置了working_dir: /GO/src?这会让容器启动时切换到这个不存在的目录,自然找不到你的main执行文件
  • 有没有挂载本地volume到/GO/src?如果本地对应目录里没有main文件,就会触发这个错误
  • 再检查下command字段,是不是误写了/GO/src/main作为启动命令,而不是Dockerfile里定义的/app/main

3. 适配iron/go:dev的默认GOPATH(可选优化)

虽然你单独构建没问题,但iron/go:dev的默认GOPATH是/GO,如果你的Go代码依赖GOPATH的目录结构,后续可能还会出问题。可以调整下Dockerfile让代码符合这个规范,彻底避免路径冲突:

修改后的Dockerfile:

FROM iron/go:dev
# 按照GOPATH规范创建代码目录,把your-repo-name换成你的实际仓库名
RUN mkdir -p /GO/src/your-repo-name
COPY src/main/main.go /GO/src/your-repo-name/.
ENV SRC_DIR=/GO/src/your-repo-name
ADD . $SRC_DIR
RUN go get goji.io
RUN go get gopkg.in/mgo.v2
RUN cd $SRC_DIR; go build -o main
ENTRYPOINT ["/GO/src/your-repo-name/main"]

这样代码就放在了镜像默认的GOPATH路径下,和镜像的环境更匹配,能减少后续踩坑的可能。

4. 验证配置并重新构建

先把你的docker-compose.yml补全,然后用下面的命令验证配置语法没问题,再重新构建(加--no-cache可以避免之前的构建缓存干扰):

docker-compose config
docker-compose build --no-cache

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:10:53