2

这是 docker-compose.yml 的示例:

# docker-compose.yml

version: '3'

services:
  web:
    image: ghost:latest
    ports:
      - 0:2368
    environment:
      url: http://ghost.localhost:30001

我想获取服务随机端口并在urlenv 变量中设置如下:

url: "http://ghost.localhost:{{.Service.Port}}"

最终目标是在不手动设置端口的情况下部署多个堆栈。

docker stack deploy --compose-file=docker-compose.yml ghost1
docker stack deploy --compose-file=docker-compose.yml ghost2
docker stack deploy --compose-file=docker-compose.yml ghost3

这是可能的 ?

4

3 回答 3

1

不,这现在是不可能的。有一个功能请求,但它仍然是开放的(它已经超过 4 年了)。

于 2018-10-09T20:08:19.960 回答
0

使用 .env 文件在 docker-compse.yml 中定义动态值。无论是端口还是任何其他值。

示例 docker-compose:

testcore.web:
       image: xxxxxxxxxxxxxxx.dkr.ecr.ap-northeast-2.amazonaws.com/testcore:latest
       volumes: 
            - c:/logs:c:/logs
       ports:
            - ${TEST_CORE_PORT}:80
       environment:
            - CONSUL_URL=http://${CONSUL_IP}:8500 
            - HOST=${HOST_ADDRESS}:${TEST_CORE_PORT}

在 .env 文件中,您可以定义这些变量的值:

CONSUL_IP=172.31.28.151
HOST_ADDRESS=172.31.16.221
TEST_CORE_PORT=10002
于 2018-10-06T17:36:17.760 回答
0

是的,您可以选择一个端口范围(我建议使用更高的范围,例如 9000-9100),但请记住,每个打开的端口都会启动一个进程:为什么 Docker 运行这么多进程来映射端口我的应用程序?因此,性能可能会不太理想。

您可能想研究使用 docker“主机网络”或其他一些非默认网络设置。

于 2018-10-06T11:56:59.560 回答