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

docker compose需要通过服务名称(尤其是端口)获取属性

  •  0
  • user63898  · 技术社区  · 6 年前

    我尝试从我在compose_文件中定义的服务中获取端口。yml公司

    version: '3.3'
    
    services:
      oracleTest:
        image: ora_image
        container_name: "test1"
        ports:
         - 15211:1521
    
      mysqlTest:
        image: mysql:8.0
        container_name: "test2"
        restart: always
        ports:
          - 33061:3306
    

    我发现我可以通过容器名获得端口,这不是我需要的
    我可以通过以下方式获得服务:

    docker-compose ps --services
    

    docker port mysql8.0 | cut -d':' -f 2
    

    我需要的是这样的伪代码:

     docker-compose -f compose_file.yml port oracleTest
    

    或者任何像这样的想法。。。知道吗?

    0 回复  |  直到 6 年前
        1
  •  0
  •   hackinteachk    6 年前

    如果您希望显式访问端口,那么您可能希望将端口注入到 docker-compose.yml

    说你有 .env

    oraclePort=15211
    mysqlPort=33061
    

    docker撰写。yml公司 接受变量为

    version: '3.3'
    
    services:
      oracleTest:
        image: ora_image
        container_name: "test1"
        ports:
         -$oraclePort:1521 #<-- notice the variable
    
      mysqlTest:
        image: mysql:8.0
        container_name: "test2"
        restart: always
        ports:
          -$mysqlPort:3306 #<-- notice the variable
    

        2
  •  0
  •   Yasen    6 年前

    自从 docker-compose.yml 是一个常规的YAML文件,您可以使用 yq 作为YAML shell解析器。

    kislyuk/yq: Command-line YAML and XML processor - jq wrapper for YAML/XML documents

    https://kislyuk.github.io/yq/

    pip install yq
    pip install jq
    

    从解析端口 docker撰写。yml公司

    cat docker-compose.yml | yq '.services|.[].ports' 
    [
      "15211:1521"
    ]
    [
      "33061:3306"
    ]
    

    oracleTest

    我需要的是这样的伪代码:

    docker-compose -f compose_file.yml port oracleTest

    cat docker-compose.yml | yq '.services.oracleTest.ports' 
    [
      "15211:1521"
    ]