簡體   English   中英

Github 操作:docker/build-push-action@v2 set network=host

[英]Github action: docker/build-push-action@v2 set network=host

我們使用 Github Actions 和 Docker 來構建我們的項目。 您可以想象,在我們開發團隊的每次推送中,一個定義明確的管道都會接受更改,構建新映像並將其推送到注冊表中。 幾天后,管道開始拋出有關連接問題的“奇怪”錯誤。 只需重新運行整個管道即可臨時修復它。 今天,管道已經到了不歸路的地步。 每個構建都停留在相同的 docker 構建步驟上:

RUN apt/apk/yum update

...而 output 是這樣的:

Github 動作截圖

現在,我設法在這個github 問題線程中找到了解決這個問題的方法。 正如幾個用戶所建議的那樣,我嘗試運行docker build -t <image_name> --network=host. 在一個簡單的 Dockerfile 上(其中包含一個運行apk update命令的高山映像)。

一切都像魅力一樣。 現在我必須將此修復應用到 github 操作管道。

首先,讓我們看一下定義到管道中的 docker 構建階段(出於安全原因,我屏蔽了 Dockfile 的某些部分):

  - name: Build and push
    uses: docker/build-push-action@v2
    with:
      context: .
      push: true
      file: Dockerfile
      tags: |
        <image>
      build-args: |
        <args>
      cache-from: type=registry,ref=<image_cache>
      cache-to: type=registry,ref=<image_cache>

查看docker/build-push-action@v2的官方文檔,我們可以在構建期間定義網絡配置,只需添加

network: host

with:定制。

按照Docker 的官方文檔,關於網絡參數,引用:

--network=host 的使用受到 network.host 權利的保護,當使用 --allow-insecure-entitlement network.host 標志或在 buildkitd 配置中啟動 buildkitd 守護進程時,需要啟用該權利,以及使用--allow network.host 標志。

因此,結合這兩個文檔,我認為定義網絡參數的正確方法是這樣的:

  - name: Build and push
    uses: docker/build-push-action@v2
    with:
      context: .
      push: true
      allow: network.host,security.insecure #NEW
      network: host #NEW
      file: Dockerfile
      tags: |
        <image>
      build-args: |
        <args>
      cache-from: type=registry,ref=<image_cache>
      cache-to: type=registry,ref=<image_cache>

但它不起作用。 同樣的情況,多年來一直堅持 apk/apt 升級。

所以我在這里問你如何正確配置 docker/build-push-action@v2 階段,以定義參數network=host並克服連接問題。

      - name: Set up Docker Buildx
        id: buildx
        uses: docker/setup-buildx-action@v2
        with:
          driver-opts: |
            network=host

基於@user19972112 解決方案,我想出了如何克服這個問題。

docker/setup-buildx-action@v1步驟中,我添加了兩個屬性:

      buildkitd-flags: '--allow-insecure-entitlement network.host'
      driver-opts: network=host

然后,進入 docker/build-push-action@v2 步驟,您必須允許並指定網絡等於主機:

      allow: network.host
      network: host

因此,結果將是:

[...]

 - name: Set up Docker Buildx
    id: buildx
    uses: docker/setup-buildx-action@v1
    with:
      version: latest
      endpoint: builders
      buildkitd-flags: '--allow-insecure-entitlement network.host'
      driver-opts: network=host
 
[...]

 - name: Build and push
    uses: docker/build-push-action@v2
    with:
      context: .
      push: true
      allow: network.host
      network: host
      file: ./docker/.dockerfile
[...]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM