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

标签 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在我的主机?

最佳答案

一个 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/

    相关文章:

    docker - 限制docker-compose的日志数量

    networking - Docker:无法运行Docker命令

    string - 判断一个字符是字母还是数字

    sql - 我应该将常见的 SQL 查询或 CTE 分开并放在一个变量中吗?

    mongodb - Docker为MongoDB ReplicaSet撰写

    docker - 如何撰写docker-compose.yml,以便我可以从php访问Deamon的容器?

    python - 无法在 alpine docker 镜像上安装 PyMuPDF

    go - 如何将 interface{} 作为特定结构传递给函数?

    mongodb - Docker 中的 Mongo ReplicaSet - 无法添加用户 : not master

    docker - 使用 docker compose 连接 2 个 docker 容器