簡體   English   中英

在構建 docker-compose v2 期間訪問 docker 網絡?

[英]Access a docker network during build of docker-compose v2?

概括

有一個docker-compose.yml文件來構建這樣的圖像:

services:
  my-service:
    build: 
      context: My.VS.AppFolder
    networks:
      - my-docker

networks:
  my-docker:
    external: true

定義的網絡僅在ENTRYPOINT中可用。 但不是在構建期間。 如何在構建Dockerfile期間訪問同一網絡my-docker docker 上的另一個容器?

用例:從私有倉庫獲取 NuGet 包

用例描述

我有一個 ASP.NET 核心 MVC 2.1 web 應用程序。 為了更好地分離關注點,我想在另一個單獨的 web 應用程序(例如管理界面)中實現某些功能。 為了避免復制應用程序布局 (Razor) 或一些輔助實用程序類等共享內容,我為這些內容創建了一個共享項目。

所以現在有三個項目:

  • MyApp (原始應用程序)
  • MyApp.Core (用於共享的東西)
  • 我的應用程序管理員

由於MyApp.Core需要從其他項目中引用,因此我將BaGet 安裝為簡單的 NuGet 托管存儲庫,用於我的 docker 構建環境。 此容器在nuget.config中使用其 DNS 名稱進行內部引用,在MyApp的解決方案級別創建(在新的MyApp.Admin上相同,但為了簡單起見,讓我們專注於MyApp )。

問題

MyAppDockerfile中,我現在正在這樣做:

RUN dotnet restore --configfile nuget.config

並且需要訪問my-docker docker 網絡上名為baget的 dns 名稱。 研究表明,這只有在docker-compose的至少 3.4 版才有可能,而且似乎還沒有正式記錄。 但是Docker 從 v3 的 v2 中刪除了幾個選項,例如我正在使用的mem_limits等資源限制。 從 v3 開始,它們僅可使用 swarm,不再適用於單個節點。

所以我目前沒有看到除了遷移到 v3 和 swarm 之外的任何解決方案,這會導致額外的工作和復雜性,除了這個網絡問題之外沒有其他好處。 我的項目並不需要swarm那么大。

我發現了兩種解決此問題的方法:

使用docker cli 工具而不是docker-compose

我沒有使用docker-compose up -d --build ,而是使用 dockers CLI 工具手動構建映像,因為它有一個--network開關,允許在構建期間指定網絡:

docker build --network my-docker -t my-service:latest --build-arg ASPNETCORE_ENVIRONMENT=Development My.VS.AppFolder

現在在docker-compose.yml中引用這個圖像,而不是在那里構建它:

services:
  my-service:
    image: my-service:latest

構建映像后,在不帶--build標志的情況下運行docker-compose up -d 這會導致一些開銷,因為您必須進行 CLI 調用,並且對於像alpine-3.2.1這樣的真正標記,需要使用 env 變量指定此標記並傳遞給 docker/docker-compose。 但它似乎是生產使用的最佳替代方案。

兼容模式

docker-compose起,docker-compose 中有一個--compatibility開關,允許使用新的 v3 文件版本,但 map 群選項,如資源限制到本地 v2 形式。 換句話說:您可以在 v3 中使用指定的ressources ,並且在使用此開關時它們適用於docker-compose 否則,它們將在docker-compose上被忽略,並且僅對docker stack deploy有效。

因此,使用此開關,您可以從構建期間定義網絡的能力中受益,而不會失去資源限制。 但是文檔警告說,這對於生產性使用來說不夠穩定:

我們建議不要在生產中使用 --compatibility 模式。 由於生成的配置只是使用非 Swarm 模式屬性的近似值,因此可能會產生意想不到的結果。

出於這個原因,我不認為它是一個真正的解決方案,而是使用第一種使用 dockers CLI 構建圖像的方法,其中可以指定網絡。

暫無
暫無

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

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