docker - 当主要 go 文件位于嵌套目录中时,如何解析 dockerfile 和 docker-compose?
问题描述
我对 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
or/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
在这一点上,我不确定还能尝试什么......
解决方案
要在 docker-compose.yml 中解析 Dockerfile,您需要更改构建部分,如下所示
version: '3.9'
services:
backend:
build:
context: .
dockerfile: Dockerfile
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:
你的 Dockerfile 有一些问题,
FROM golang:1.16
WORKDIR /app
# File changes must be added at the very end, to avoid the installation of dependencies again and again
RUN curl -sSfL https://raw.githubusercontent.com/cosmtrek/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin
COPY go.mod .
COPY go.sum . # can not find this file in the directory structure
RUN go mod download
COPY ../.. . # doesn't make sense, just use COPY . .
CMD ["air"]
推荐阅读
- python - 简单的 Python 摇滚,纸,剪刀游戏需要帮助
- mysql - Is this database schema for reservation and incidentals billings correct?
- java - 如何创建一个类的对象,其中构造函数将参数作为其他类的对象
- c# - 如何从响应标头中的内容类型中删除 charset=utf-8
- ajax - 使用 Ajax CodeIgniter 编辑按钮 byId
- amazon-s3 - kafka,s3-sink 连接器无法获取架构版本 ID - 用户无权执行:glue:GetSchemaVersion
- google-colaboratory - 谷歌 Colab 上的 Kenlm lmplz
- react-native - React Native Android:您如何确定使用哪个密钥对您的应用程序进行签名?
- javascript - 性能重的函数,它在一个非常大的 SVG 中的每个多边形上添加一个事件监听器
- php - 如何代客运行 symfony?