我正在使用 docker-compose 来运行我的 golang 应用程序。
这是我的 Dockerfile
FROM golang:1.13
WORKDIR /app
COPY go.mod ./
RUN go mod download
COPY . .
RUN go build -o main .
CMD ["/app/main"]
和我的 docker-compose.yml
version: '3.7'
services:
app:
build: ./myapp
container_name: myapp
volumes:
- ./myapp:/app
当我运行
docker-compose build
main
文件未出现在 myapp
目录docker-compose up myapp
不工作,因为 main
文件未找到。但是
docker run mypp
能行得通。如何在 dockerfile 中构建 main.go 并保留 main
在我的主机?
最佳答案
一个 docker-compose build
步骤运行完成,忽略 docker-compose.yml
中的所有其他内容文件。然后在考虑这些选项的情况下执行生成的图像。所以你展示的序列做了两件事:
COPY
将其源代码放入,并生成 /app/main
图像内的二进制;主机系统上没有任何影响。 ./myapp
/app
上的目录及其内容在容器中,在那里隐藏任何东西。 在这一系列步骤中,不会从容器中复制任何内容,您只是将内容推送到 Docker 空间中。如果您想运行您构建的二进制文件,请删除
volumes:
mount 让二进制文件中的图像运行。在评论中,您建议您的目标是构建 Go 程序并获取二进制文件。你不想要 Docker。围棋 Getting Started页面有关于如何安装 Go 工具链的说明,你可以
go install
你的程序。
关于docker - 为什么 dockerfile RUN 中创建的文件不在主机上,我已经挂载主机目录进行服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59431256/