代码之家  ›  专栏  ›  技术社区  ›  zappee

docker中的整型变量表达式-合成.yml

  •  0
  • zappee  · 技术社区  · 7 年前

    docker-compose.yml 基于设置端口 BASE_PORT 变量。

    我有一个 .env 包含以下内容的文件:

    BASE_PORT=57900
    

    我的start bash脚本如下所示:

    #/bin/sh
    
    . .env
    docker-compose stop
    docker-compose rm -v -f
    docker-compose up -d adminserver
    

    码头工人-合成.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 回复  |  直到 7 年前
        1
  •  3
  •   David Maze    7 年前

    Docker Compose不支持这个。

    The ports: syntax 支持此模式:

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

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

    这会更接近你的需要。