gpt4 book ai didi

docker - 使用唯一的IP地址实例化多个docker-compose管道

转载 作者:行者123 更新时间:2023-12-02 19:05:07 26 4
gpt4 key购买 nike

我正在尝试复制docker-compose管道。该管道协调一堆容器,最后将其中一个容器上的port 80映射到主机上的port 8000,以进行外部通信。

如何创建同一docker-compose管道的多个实例,以便每个实例都获得自己的IP地址,我可以在其他机器上使用该IP地址通过port 8000访问该管道的相应实例?

这是我要实现的目标的直观表示。

eProblem Diagram

注意,两个实例使用相同的docker-compose.yml并公开相同的端口。但是,区别在于它们被分配了唯一的IP地址。我可以指示docker-compose管道仅在特定网络上启动吗?或总是在部署前创建一个新网络,以便每个实例都获得一个新的IP地址,并且由于该抽象端口,不会发生冲突。

另外,这是一个好方法吗?如果不是,以动态方式访问同一docker-compose管道的多个实例的最佳策略是什么,这样我就不必手动修改每个docker-compose.yml文件来映射未使用的端口?

最佳答案

怎么样:

cat <<EOF
version: "3"
services:
web1:
image: python:2.7-alpine
command: ["python", "-m", "SimpleHTTPServer", "8080"]
web2:
image: python:2.7-alpine
command: ["python", "-m", "SimpleHTTPServer", "8080"]
EOF

然后通过以下方式获取虚拟地址:
docker ps | grep compose_ | cut -f1 -d' ' | while read s; do docker inspect $s | egrep "IPAddr.*[0-9]"; done
"IPAddress": "172.28.0.3",
"IPAddress": "172.28.0.2",

然后确认两个地址都在同一端口上响应:
$ curl -sv 172.28.0.2:8080
...
* Connected to 172.28.0.3 (172.28.0.3) port 8080 (#0)
...
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><html>
...

$ curl -s 172.28.0.3:8080
...

您可以使用自定义网络以特定方式隔离容器,但是即使具有默认行为,您也可以创建此组合堆栈的多个实例,并且始终会获得唯一的虚拟地址,可以有选择地从客户端访问这些地址。如果要将外部客户端流量路由到特定的后端,可以将反向代理放在前面。

通过用$ COMPOSE_PROJECT_NAME或-p覆盖每个实例的项目名称,可以拥有多个实例。例如。:
docker-compose -p mytest1 up -d
docker-compose -p mytest2 up -d

希望能有所帮助。

关于docker - 使用唯一的IP地址实例化多个docker-compose管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54220793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com