docker-compose.yml中的整数变量表达式

时间:2019-02-22 15:48:23

标签: 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"

有什么想法使它起作用吗?

1 个答案:

答案 0 :(得分:3)

Docker Compose不支持。

在您的示例中,主机和容器侧都有一系列连续的端口。 The ports: syntax 确实支持此模式:

ports:
  - '10000-10003:8000-8003'

仍然没有表达式解析器或数学功能,但是您可以编写

ports:

  - '${BASE_PORT}-${FINAL_PORT}:8000-8003'

那将更接近您的需求。