为什么在dockerfile RUN中创建的文件不在主机上,我已经挂载了主机目录以进行服务

时间:2019-12-20 20:55:48

标签: docker go docker-compose

我正在使用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保留在主机中?

1 个答案:

答案 0 :(得分:0)

docker-compose build步骤执行完毕,而忽略了docker-compose.yml文件中的所有其他内容。然后考虑这些选项来执行生成的图像。因此,您显示的序列有两件事:

  1. 构建图像,COPY插入其源代码,并在图像内部生成/app/main二进制文件;主机系统上没有任何影响。
  2. 基于该图像运行容器,但是将当前./myapp目录及其内容安装在容器中的/app上方,并在其中隐藏任何内容。

在此步骤序列中,什么也没有从容器中复制出来,您只是将东西推入Docker空间。如果您要运行自己构建的二进制文件,请删除volumes:安装,以使二进制文件中的图像运行。

在注释中,您建议您的目标是仅构建Go程序并获取二进制文件。您不想要Docker。 Go Getting Started页上有如何安装Go工具链的说明,您可以go install程序。