gpt4 book ai didi

docker - 内部和外部网络与docker-compose吗?

转载 作者:行者123 更新时间:2023-12-02 18:47:56 24 4
gpt4 key购买 nike

假设我有2个docker容器:(A)shinyapptest是一个前端,需要与(B)testapi进行通信,并且外界可以访问。

为此,我通过运行以下命令创建了网络backend:

docker network create -d bridge --subnet 192.168.0.0/24 --gateway 192.168.0.1 backend

然后 shinyapptest对其 "http://192.168.0.1:3098进行API调用。

为了使一切正常运行,我编写了以下 docker-compose:
version: '3.7'
services:
shinyapptest:
container_name: testshiny
image: testshiny
restart: unless-stopped
networks:
- frontend
- backend
ports:
- 80:3838
testapi:
container_name: testapi
image: testapi
restart: unless-stopped
networks:
- backend
ports:
- 3098:3098
networks:
backend:
external:
name: backend
frontend:
external:
name: frontend

这是正确的吗?基本上,我希望(A)可以访问(B),而外界可以访问(A),但不能访问(B)。如果正确,我应该如何创建 frontend网络?现在,如果我尝试运行 docker-compose up,则会收到此错误,因为该网络不存在:

$ docker-compose up
ERROR: Network frontend declared as external, but could not be found. Please create the network manually using `docker network create frontend` and try again.

最佳答案

实际上,您甚至不需要frontend网络。如果将backend网络连接到两个容器,则它们应该能够相互通信。就像同一网络上的两台计算机一样。

如果您不希望从外部访问容器,只需不要将相应的端口映射回您的主机系统即可。那将使他们孤立。

目前,您的api已公开了3098端口。如果您将其删除,但是将网络连接到两个容器,则可以从3098容器内部调用端口frontend,但不能从外部调用。

您甚至可以将分配的容器名称用于内部通信,如下所示:

http://testapi:3098/...

希望对您有所帮助。

关于docker - 内部和外部网络与docker-compose吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56203098/

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