【问题标题】:How to pass port mapping dynamically to the docker-compose up command?如何将端口映射动态传递给 docker-compose up 命令?
【发布时间】:2020-01-21 13:50:54
【问题描述】:

我有两个容器映像,并使用“docker-compose up -d”来编写和运行 docker。 这工作正常。我想在另一个端口运行相同的容器映像,比如 8081。 我们可以将端口映射作为命令行参数 docker-compose up -port novnc :8081:8080 传递吗? 如何将端口映射动态传递给 docker-compose up 命令?

version: '2'
services:
  ide:
    image: myApp
    image: myImage:latest
    environment:
      - DISPLAY=novnc:0.0
    depends_on:
      - novnc
    networks:
      - x11
  novnc:
    image: myImageTwo:latest
    environment:
      - DISPLAY_WIDTH=1600
      - DISPLAY_HEIGHT=968
    ports:
      - "8080:8080"
    networks:
      - x11
networks:
  x11:

【问题讨论】:

    标签: docker docker-compose containers


    【解决方案1】:

    在你的 docker-compose.yml 中使用 ${VAR}

    例如

    version: '2'
    services:
      apache:
        image: httpd:2.4
        volumes:
          - .:/usr/local/apache2/htdocs/
        ports:
          - ${APP_PORT}:80
    

    然后使用环境变量:

    $ export APP_PORT=8080
    $ docker-compose up
    

    或内联版本:

    $ APP_PORT=8080 docker-compose up
    

    【讨论】:

    • 谢谢。这有效,但它重新创建了图像。我想像 docker run 一样运行多个具有相同图像和不同端口号的容器。
    • 我试过了,它没有重新创建容器,可能有其他原因导致重新创建。
    【解决方案2】:

    您可以使用.env 文件来执行此操作。
    例如,你会有这样的东西:

    $ cat .env
    TAG=v1.5
    
    $ cat docker-compose.yml
    version: '3'
    services:
      web:
        image: "webapp:${TAG}"
    

    在示例中,您可以看到标记值位于 env 文件中设置的变量中。

    您可以在official doc了解更多信息

    【讨论】:

      【解决方案3】:

      将您的端口部分更改为:

          ports:
            - "${MY_PORT}:8080"
      

      然后只需使用MY_PORT=8081 docker-compose up -d

      【讨论】:

        【解决方案4】:

        您也可以使用端口范围

        ports:
          - "8080-8081:8080"
        

        所以你不必作为参数传递

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-23
          • 2021-10-20
          • 2022-10-17
          • 2023-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多