如何将端口映射动态传递给docker-compose up命令?

时间:2020-01-21 13:50:54

标签: docker docker-compose containers

我有两个容器映像,并使用“ 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:

4 个答案:

答案 0 :(得分:1)

您可以使用.env文件来实现。
例如,您将拥有以下内容:

$ cat .env
TAG=v1.5

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

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

您可以在official doc

中找到更多信息

答案 1 :(得分:1)

将“端口”部分更改为:

    ports:
      - "${MY_PORT}:8080"

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

答案 2 :(得分: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

答案 3 :(得分:0)

您还可以使用端口范围

ports:
  - "8080-8081:8080"

因此您不必传递参数