【发布时间】:2022-06-11 23:31:11
【问题描述】:
假设您有一个很长的 docker-compose 文件,其中包含许多在 docker 网络中相互通信的容器。我们称其为“堆栈”。您想启动此堆栈 3 次,每次的配置略有不同。为此,您可能会说:
docker-compose -p pizza up
docker-compose -p pie up
docker-compose -p soda up
但是,如果您有任何端口暴露给主机,这将失败:
nginx:
image: nginx:alpine
ports:
- "80:80"
networks:
- my_app_net
它会失败,因为主机只能在端口 80 上暴露一件事。
另一种方法是在不同的文件中定义该端口声明并使用不同的端口:
$ cat pizza.yml
services:
nginx:
ports:
- "8001:80"
$ cat pie.yml
services:
nginx:
ports:
- "8002:80"
$ cat soda.yml
services:
nginx:
ports:
- "8003:80"
docker-compose -f docker-compose.yml -f pizza.yml -p pizza up
docker-compose -f docker-compose.yml -f pie.yml -p pie up
docker-compose -f docker-compose.yml -f soda.yml -p soda up
这是可行的,因为每个堆栈都将端口 80 发布到不同的端口。这很好,但这有点烦人,因为我们必须停止/启动堆栈才能执行此操作。
我们如何在不发布端口或停止/启动堆栈的情况下做到这一点?
如果这是一个 kubernetes 集群,我们可以使用 kubectl 通过端口转发来执行此操作,如下所示:
kubectl port-forward replicaset/nginx-75f59d57f4 8001:80
这种方式更适合我的情况,因为我们不想停止堆栈以查看其中发生了什么。我们可以启动端口转发,看看发生了什么然后离开。
是否有 docker 的等价物?
相关问题:
【问题讨论】:
-
...but that's a little bit annoying because we have to stop/start the stack to do this.- 如果您的堆栈已经在运行,为什么您需要停止,这意味着您已经正确安排了端口并启动了堆栈?
标签: docker nginx docker-compose kubectl