![](/img/trans.png)
[英]GitHub Actions - Specify Multiple Tags with docker/build-push-action@v2
[英]Github action: docker/build-push-action@v2 set network=host
我們使用 Github Actions 和 Docker 來構建我們的項目。 您可以想象,在我們開發團隊的每次推送中,一個定義明確的管道都會接受更改,構建新映像並將其推送到注冊表中。 幾天后,管道開始拋出有關連接問題的“奇怪”錯誤。 只需重新運行整個管道即可臨時修復它。 今天,管道已經到了不歸路的地步。 每個構建都停留在相同的 docker 構建步驟上:
RUN apt/apk/yum update
...而 output 是這樣的:
現在,我設法在這個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.