以下是docker-compose.yml的示例:
# docker-compose.yml
version: '3'
services:
web:
image: ghost:latest
ports:
- 0:2368
environment:
url: http://ghost.localhost:30001
我想获得服务随机端口,并在url
env变量中进行如下设置:
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
有可能吗?
答案 0 :(得分:0)
是的,您可以选择端口范围(我建议使用更高的范围,例如9000-9100),但是请记住,每个打开的端口都在启动一个进程:Why does Docker run so many processes to map ports though to my application?因此,性能是可能会不理想。
您可能想研究使用docker“主机网络”或其他一些非默认网络设置。
答案 1 :(得分:0)
使用.env文件在docker-compse.yml中定义动态值。是port还是其他任何值。
示例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
答案 2 :(得分:0)
否,目前无法执行。有一个feature request,但它仍然是开放的(已有4年以上的历史了。)