警告:testval 变量未设置。默认为空字符串。
错误:没有这样的服务:testval=test
警告:testval 变量未设置。默认为空字符串。
错误:没有这样的服务:testval=test
基于dnephin answer,我创建了这个示例repo,可以将变量传递给docker-compose up。
使用方法很简单:
TEST= 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
根据文档:
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.yml来实现:
web:
...
environment:
- RAILS_ENV=production
- VIRTUAL_HOST=www.example.com
- VIRTUAL_PORT=3011
这些变量将专门针对您指定的容器,不会在容器之间共享。
此外,“docker-compose up”不带任何参数。
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)
Compose支持在名为.env
的环境文件中声明默认环境变量,该文件位于项目目录中。
步骤1:
在项目目录中创建一个名为.env
的文件
步骤2:
以VAR=VAL
的形式声明变量
注意:没有特殊处理引号,即TESTVAL='test'
表示TESTVAL是'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 ...