我正在使用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 buildmain文件未出现在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您的程序。

    10-04 23:34
    查看更多