我正在使用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
保留在主机中?
答案 0 :(得分:0)
docker-compose build
步骤执行完毕,而忽略了docker-compose.yml
文件中的所有其他内容。然后考虑这些选项来执行生成的图像。因此,您显示的序列有两件事:
COPY
插入其源代码,并在图像内部生成/app/main
二进制文件;主机系统上没有任何影响。./myapp
目录及其内容安装在容器中的/app
上方,并在其中隐藏任何内容。在此步骤序列中,什么也没有从容器中复制出来,您只是将东西推入Docker空间。如果您要运行自己构建的二进制文件,请删除volumes:
安装,以使二进制文件中的图像运行。
在注释中,您建议您的目标是仅构建Go程序并获取二进制文件。您不想要Docker。 Go Getting Started页上有如何安装Go工具链的说明,您可以go install
程序。