簡體   English   中英

如何將參數與 docker-compose 一起傳遞?

[英]How do I pass an argument along with docker-compose up?

我有一個docker-compose.yml文件,在終端中我正在typing docker-compose up [something]但我也想將參數傳遞給docker-compose.yml 這可能嗎? 我已閱讀有關插值變量的信息,並嘗試使用${testval}.yml文件中指定一個變量,然后使用docker-compose up [something] var="test"但我收到以下錯誤:

警告:未設置 testval 變量。 默認為空字符串。
錯誤:沒有這樣的服務: testval=test

基於dnephin answer ,我創建了這個示例存儲庫,您可以將一個變量傳遞給 docker-compose up。

用法很簡單:

MAC / LINUX
  • TEST= docker-compose up創建並啟動appdb容器。 然后 api 應該在端口 3030 上的 docker 守護進程上運行。
  • TEST=DO docker-compose up創建並啟動appdb容器。 api 應該在package.json文件中執行npm run test
WINDOWS (Powershell)
  • $env:TEST="";docker-compose up創建並啟動appdb容器。 然后 api 應該在端口 3030 上的 docker 守護進程上運行。
  • $env:TEST="do";docker-compose up創建並啟動appdb容器。 api 應該在package.json文件中執行npm run test

您需要確保兩件事:

  1. docker-compose.yml聲明了環境變量。 例如,
services:
    app:
        image: python3.7
        environment:
            - "SECRET_KEY=${SECRET_KEY}"
  1. docker-compose up被調用時,環境中的變量可用:
SECRET_KEY="not a secret" docker-compose up

請注意,這並不等同於在構建期間傳遞它們,因為不建議將機密存儲在 docker 映像中。

您需要將變量作為環境變量傳遞:

testvar=test docker-compose up ...

或者

export testvar=test
docker-compose up

我不確定你想在這里做什么,但如果你需要的是將環境變量傳遞給特定容器 docker-compose.yml 允許你這樣做:

web:
  ...
  environment:
    - RAILS_ENV=production
    - VIRTUAL_HOST=www.example.com
    - VIRTUAL_PORT=3011

此變量將特定於您指定它們的容器,並且不會在容器之間共享。

“docker-compose up”也不需要任何參數。

在處理構建參數時,請按如下方式在 compose yml 文件中聲明它們

services:
  app: (name of service
    build:
      context: docker/app/ (where is your docker build root)
      dockerfile: Dockerfile (that is optional)
      args:
        - COMPOSER_AUTH_TOKEN (name of variable, value will be taken from host environment)

在運行 docker-compose up 之前,按照其他人的建議導出變量。 它會起作用。 我試過。 使用 docker compose 3 及以上版本。 玩得開心

從文檔:

https://docs.docker.com/compose/reference/up/

https://docs.docker.com/compose/reference/build/

您不能將參數傳遞給 docker-compose up,但您可以將參數傳遞給 docker-compose build:

docker-compose build --build-arg KEY1=VALUE1 --build-arg KEY2=VALUE2

docker-compose不包含任何標志或命令以傳遞參數。

Compose主要是用於運行服務而不是構建映像的工具。 嘗試使用在每個dockerfile中定義的ARG作為參數。

因為docker-compose並非為此目的而設計,所以不可能支持每個唯一的構建方案。 您只能真正支持最常見的構建方案。

您可以在此處查看有關他的主題的更多信息。

您可以使用docker-compose build --build-arg app_env=production映像。 然后,您可以使用docker-compose up 這將附加到生成的圖像。

# docker-compose.yml    
services:
      service_name:
        build:
          context: .
          args:
          - app_env=development
....


# Dockerfile
...
ARG app_env
ENV RACK_ENV $app_env
RUN if [ ${APP_ENV} = production ]; run command; else run another command; fi
...

然后在命令行中輸入以下內容

docker-compose build --build-arg app_env=production
docker-compose up

Compose 支持在項目目錄中名為.env的環境文件中聲明默認環境變量。

步驟 1:在項目目錄中創建一個名為.env的文件

第 2 步:以VAR=VAL的形式聲明變量

注意:引號沒有特殊處理,即TESTVAL='test'意味着TESTVAL is 'test' (帶引號)而不僅僅是test 因此,您將其聲明為TESTVAL=test

第 3 步:將 Compose 文件中的變量用作:

environment:
  myval=${TESTVAL}

文檔:在文件中聲明默認環境變量

獎勵:如果您在docker-compose.yaml中即時構建映像,那么您甚至可以使用環境變量傳遞build args 例如:

version: "3.8"
services:
  myapp:
    build:
      context: ./myDir
      dockerfile: ./myDir/myDockerfile
      args:
      - MYARG=${TESTVAL}

我試圖找到批處理文件的解決方案,根據Rafael Delboni 的回答,您可以在批處理文件中添加命令以調用 powershell:

powershell $env:TEST="";docker-compose up ...

但不是那樣,因為在批處理文件中調用 powershell 很昂貴,您可以在批處理文件中初始化 TEST 變量,然后調用 docker-compose 命令。 像這樣的東西:

set TEST = ...
docker compose up ...

暫無
暫無

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

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