【发布时间】:2021-09-19 00:21:25
【问题描述】:
我对 Docker 很陌生,所以请原谅我,但是当 Main.go 位于根级别时,我有一个工作的 dockerfile 和 docker-compose,但是在这个项目中,如果我将 main.go 放在根级别,应用程序将会中断.
文件结构
queue-backend
- .idea
- cmd
- appCode
- handler.go
- helper.go
- main.go
- routes.go
- pkg
- forms
- models
- mongodb
- models.go
- tmp
.gitignore
docker-compose.yml
Dockerfile
go.mod
README.md
db
extensions
无论如何...我的 dockerfile 看起来像这样
FROM golang:1.16
WORKDIR /app
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY ../.. .
RUN curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
CMD ["air"]
Docker-compose.yml 看起来像
version: '3.9'
services:
backend:
build: ""
ports:
- 8000:8000
volumes:
- .:/app
depends_on:
- mongodb_container
mongodb_container:
image: mongo:latest
environment:
MONGO_INITDB_ROOT_USERNAME: queue-delivery
MONGO_INITDB_ROOT_PASSWORD: password
ports:
- 27017:27017
volumes:
- mongodb_data_container:/data/db
volumes:
mongodb_data_container:
我尝试将 WORKDIR 设置为 /app/cmd/appCode 或 /cmd/appCode 并在 docker-compose 中将其匹配为 .:/app/cmd/appCode 和 .:/cmd/appCode 都不起作用,它总是返回这个,或者上面声明的路径而不是只是“/app”路径
backend_1 | no Go files in /app
backend_1 | failed to build, error: exit status 1
在这一点上,我不确定还能尝试什么...
【问题讨论】:
-
这里需要实时重新加载工具吗?你能
COPY . .、RUN go install ./cmd/appCode并移除volumes:挂载吗?看起来你可以configureairto rebuild the Docker image too。
标签: docker go docker-compose dockerfile