簡體   English   中英

訪問 Dockerfile 中的 container_name(來自 docker-compose)

[英]Access container_name in Dockerfile (from docker-compose)

我已經設置了一個 docker-compose 項目,它正在創建多個圖像:

cache_server:
    image: current_timezone/full-supervisord-cache-server:1.00
    container_name: renamed-varnish-cache
    networks:
      - network_frontend
    build:
      context: "./all-services/"
      dockerfile: "./cache-server/Dockerfile.cacheserver.varnish"
      args:
        - DOCKER_CONTAINER_USERNAME=username
    ports:
      - "6081:6081"
      - "6082:6082"

當我使用docker-compose up -f file1.yml file2.override.yml我將獲得容器:在上述情況下,它將被命名為: renamed-varnish-cache

在相應的 Dockerfile ( ./nginx-proxy/Dockerfile.proxy.nginx ) 中,我希望能夠使用上面顯示的docker-compose.yml中定義的container_name屬性。

創建容器后,我想更新 Dockerfile 內的 Varnish 配置: RUN sed -i "s|webserver_container_name|renamed-varnish-cache|g" /etc/varnish/default.vcl"

例如:

    backend webserver_container_name{
        .host = "webserver_container_name";
        .port = "8080";
    }

致:我預計我將不得不將后端的-替換為_

    backend renamed_varnish_cache{
        .host = "renamed-varnish-cache";
        .port = "8080";
    }

有沒有辦法接收 docker-compose 命名項目作為Dockerfile 中的變量?

在核心 Docker 中,有兩個獨立的概念。 映像是某些軟件及其依賴項打包在一起的構建版本; 容器是圖像的運行實例。 有單獨的docker builddocker run命令來構建鏡像和啟動容器,您可以從單個鏡像啟動多個容器。

Docker Compose 包裝了這些概念。 特別是build:塊對應於 image-build 步驟,這就是調用 Dockerfile 的內容。 Dockerfile 中沒有其他 Compose 選項可用或可見。 您無法訪問container_name:environment: variables 或volumes:因為它們在構建生命周期中此時不存在; 您也無法從 Dockerfile 內部聯系其他 Compose 服務。

如果多個容器具有基本相同的代碼庫但需要不同的頂級命令,那么讓多個容器從同一個映像運行是很常見的。 一個例子是 Python Django 應用程序需要 Celery 后台工作程序; 您將擁有相同的項目結構,但 Celery 工作人員的命令不同。

version: '3.8'
services:
  web:
    build: .
    image: my/django-app
  worker:
    image: my/django-app
    command: celery worker ...

現在使用此堆棧,您可以docker-compose build以構建一個映像,然后運行docker-compose up以從該映像啟動兩個容器。 (在構建期間,您無法知道容器名稱是什么,並且會有兩個容器名稱,因此您不能只在 Dockerfile 中使用一個。)

在設計級別,這意味着您通常不能在映像本身中包含配置類型設置(其他容器的主機名、主機共享文件系統的用戶 ID)。 如果您的應用程序允許您將這些內容指定為環境變量,那么這是最簡單的選擇。 您可以使用綁定掛載 ( volumes: :) 來注入整個配置文件。 如果這些都不適合您,您可以使用入口點腳本來重寫配置文件

暫無
暫無

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

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