我想在docker-compose.yml
中使用整数表达式来基于BASE_PORT
变量设置端口。
我有一个.env
文件,内容如下:
BASE_PORT=57900
我的开始bash脚本如下:
#/bin/sh
. .env
docker-compose stop
docker-compose rm -v -f
docker-compose up -d adminserver
docker-compose.yml
...
services:
adminserver:
image: ....
hostname: ...
ports:
- ${BASE_PORT}:8001
...
此配置就像超级按钮一样,docker ps | grep 8001
返回的内容正确。
但是我想使用更多的端口配置和更多的ports
部分:
...
services:
adminserver:
image: ....
hostname: ...
ports:
- $((BASE_PORT+1)):8001
- $((BASE_PORT+2)):8002
- $((BASE_PORT+3)):8003
...
databaseserver:
image: ....
hostname: ...
ports:
- $((BASE_PORT+10)):1541
zookeeper:
image: ....
hostname: ...
ports:
- $((BASE_PORT+30)):2181
kafka:
image: ....
hostname: ...
ports:
- $((BASE_PORT+40)):9092
- $((BASE_PORT+41)):9093
- $((BASE_PORT+42)):9094
$((BASE_PORT+1))
表达式在shell中有效,但在我的* .yml文件中无效。
我再次收到此错误:
ERROR: Invalid interpolation format for "ports" option in service "adminserver": "$((BASE_PORT+1)):8001"
有什么想法使它起作用吗?
答案 0 :(得分:3)
Docker Compose不支持。
在您的示例中,主机和容器侧都有一系列连续的端口。 The ports:
syntax 确实支持此模式:
ports:
- '10000-10003:8000-8003'
仍然没有表达式解析器或数学功能,但是您可以编写
ports:
- '${BASE_PORT}-${FINAL_PORT}:8000-8003'
那将更接近您的需求。