我正在使用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:
挂载以使二进制文件中的图像运行。在注释中,您建议您的目标是仅构建Go程序并获取二进制文件。您不想要Docker。 Go Getting Started页面上有如何安装Go工具链的说明,您可以
go install
您的程序。