亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Go 1.14 模塊構建命令忽略 Docker 中的供應商目錄

Go 1.14 模塊構建命令忽略 Docker 中的供應商目錄

Go
墨色風雨 2022-06-06 15:07:48
除非依賴項已更改,否則如何go build在 Docker 中獲取命令以在每次構建時使用模塊緩存或供應商目錄?我已經嘗試了這兩種方法,但結果不一致:如何在 Docker 容器中保留 go 1.11 模塊? ^ 這不起作用,我相信因為我使用的是 Docker “builder” 模式。https://medium.com/@monirz/golang-dependency-solution-with-go-module-and-docker-8967da6dd9f6 ^ 這應該可以,但由于某種原因不能...我正在一臺服務器上工作,對于我對 go 源代碼所做的每一個小改動,我都需要重新編譯是有道理的,但是那一步應該還必須再次重新下載所有依賴項是沒有意義的,每次。我正在將此服務器構建為go module,這是我當前的 Dockerfile:FROM golang:1.14 AS builder# Add the sourceWORKDIR /appCOPY . .# Statically compile our app for use in a distroless containerRUN CGO_ENABLED=0 go build -mod vendor -ldflags="-w -s" -v -o app .# A distroless container image with some basics like SSL certificates# https://github.com/GoogleContainerTools/distrolessFROM gcr.io/distroless/static# Copy over binary and words dirCOPY --from=builder /app/app /appENTRYPOINT ["/app"]我還嘗試將-mod=vendor標志添加到 go 命令中并且它不會改變行為......如果 1.14 在模塊路徑中檢測到供應商目錄(在那里),它應該已經自動使用該標志。
查看完整描述

1 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

供應商文件正在被使用,但它看起來不像,因為雖然它沒有在構建時重新下載所有模塊,但它在每次構建時都重新構建它們。問題似乎是在嘗試使用構建器模式,我已經更改了我的開發 compose 文件以處理 compose yaml 中的所有內容,并將保留構建器模式 Dockerfile 用于生產(無論如何它只是真正重要的地方)。


現在使用以下內容,我的開發構建速度更快,并且似乎不會在每次構建時重新編譯每個模塊:


docker-compose.yaml


version: "3.7"


services:

  nginx:

    container_name: nginx

    image: nginx:alpine

    restart: unless-stopped

    ports:

      - 8000:80

    depends_on:

      - api

    volumes:

      - ./container_spec/nginx.conf:/etc/nginx/nginx.conf

      - ./container_spec/cors_support:/etc/nginx/cors_support


  api:

    image: golang:1.14

    container_name: api

    restart: always

    working_dir: /app

    volumes:

      - .:/app

      - cache:/go

    expose:

      - 8080

    command: go run main.go


volumes:

  cache:


查看完整回答
反對 回復 2022-06-06
  • 1 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號