[英]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 / LINUXTEST= docker-compose up
創建並啟動app
和db
容器。 然后 api 應該在端口 3030 上的 docker 守護進程上運行。TEST=DO docker-compose up
創建並啟動app
和db
容器。 api 應該在package.json
文件中執行npm run test
。$env:TEST="";docker-compose up
創建並啟動app
和db
容器。 然后 api 應該在端口 3030 上的 docker 守護進程上運行。$env:TEST="do";docker-compose up
創建並啟動app
和db
容器。 api 應該在package.json
文件中執行npm run test
。您需要確保兩件事:
docker-compose.yml
聲明了環境變量。 例如,services:
app:
image: python3.7
environment:
- "SECRET_KEY=${SECRET_KEY}"
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.