docker-compose部署带Air热重载的Go应用报错air可执行文件未找到
问题原因
报错的核心原因是Air可执行文件安装路径没有被纳入容器的系统PATH环境变量,或者基础镜像配置异常导致Air未正常安装:
- 你当前将Air安装到了
$(go env GOPATH)/bin路径下,默认Go镜像的GOPATH路径为/go/bin,该路径默认不在系统PATH中,容器启动时无法找到Air执行文件 - 若你使用的
base镜像不是官方Golang Alpine镜像,还可能出现go命令不存在,导致Air安装脚本执行失败的情况
解决方案
按以下步骤依次调整即可:
- 修正Dockerfile的基础镜像与环境变量配置,参考调整后的Dockerfile:
# 替换为官方Golang Alpine镜像,若你原本的base镜像已符合要求可保留第一行 FROM golang:1.21-alpine as dev WORKDIR /opt/app/api RUN apk update RUN apk add git gcc musl-dev curl # 安装Air到GOPATH/bin RUN curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin # 将GOPATH/bin加入系统PATH ENV PATH="$PATH:/go/bin" # 放开依赖安装命令,避免Air启动时缺少依赖报错 RUN go mod tidy CMD ["air"]
- 重新构建应用镜像,每次修改Dockerfile后必须执行构建命令才会生效:
sudo docker-compose build app
- 再启动容器即可:
sudo docker-compose up -d
备选快速解决方案
如果不想修改PATH,也可以直接在CMD中使用Air的绝对路径启动,将Dockerfile最后一行替换为:
CMD ["/go/bin/air"]
内容的提问来源于stack exchange,提问作者Sarthak M. Das
相关产品推荐
相关产品推荐

