zap*_*pee 6 docker docker-compose
我想使用整数表达式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"
知道如何使它工作吗?
Docker Compose 只是不支持这一点。
在您的示例中,主机和容器端都有一系列连续的端口。  语法ports: 确实支持这种模式:
ports:
  - '10000-10003:8000-8003'
仍然没有表达式解析器或数学功能,但你可以写
ports:
  - '${BASE_PORT}-${FINAL_PORT}:8000-8003'
这会更接近你所需要的。
| 归档时间: | 
 | 
| 查看次数: | 1141 次 | 
| 最近记录: |