我有一个包含5个必须通信的服务的docker-compose。
我使用docker network inspect networkname_dafult
检查了它们是否在同一网络中
我可以在同一网络中找到所有应用程序。
inspect的结果返回了一个带有name属性的json。
```"Name": "app_1",```
在每个服务中,我都使用该名称发出http请求,但它们返回
例如"connect ECONNREFUSED 127.0.0.1:5003"
。
如果我访问localhost:5003,它将起作用,并且将对每个服务起作用。
如果我尝试使用localhost:port从我的应用程序发出http请求,那么它也不起作用。
我的dockercompose.yml
version: "3.7"
services:
App1:
image: user/app1
ports:
- 5001:5001
links:
- App2
- App3
- App4
- App5
hostname: app1
App2:
image: user/app2
ports:
- 5002:5002
hostname: app2
App3:
image: user/app3
ports:
- 5003:5003
hostname: app3
App4:
image: user/app4
ports:
- 5004:5004
hostname: app4
App5:
image: user/app5
ports:
- 5005:5005
hostname: app5
我尝试使用主机名,Appx等发出http请求。我无法使它们彼此通信。
我在这里可能会想念什么?
答案 0 :(得分:0)
创建一个网络,并将服务的所有部分分配给该网络。一个例子:
version: '3.7'
networks:
app_net:
driver: bridge
services:
App1:
image: user/app1
ports:
- 5001:5001
networks:
- app_net
hostname: app1
App2:
image: user/app2
ports:
- 5002:5002
networks:
- app_net
hostname: app2
App3:
image: user/app3
ports:
- 5003:5003
networks:
- app_net
hostname: app3
App4:
image: user/app4
ports:
- 5004:5004
networks:
- app_net
hostname: app4
App5:
image: user/app5
ports:
- 5005:5005
networks:
- app_net
hostname: app5
但是可能是我缺少了一些东西。要考虑的另一件事是使用links
-更多信息here。另外,如果您要复制并粘贴此代码,请注意缩进。
答案 1 :(得分:0)
Docker-compose已经创建了一个默认网络。
我运行docker network ls
来查看哪些网络可用
并使用docker network inspect mynetwork
来查看我的docker-compose上的应用程序是否在同一网络上运行(将会)。
泊坞窗网络检查的结果是一组容器对象。 每个容器对象都有一个name属性(这是我在服务之间建立http连接所需要的信息)
"Containers": {
"01fcacc2b2dc8450c5c75e": {
"Name": "myapp_1",
"EndpointID": "9e3fa9633d9d1692d4f7120c",
"MacAddress": "00:00:00:00:00:00",
"IPv4Address": "172.33.0.2/16",
"IPv6Address": ""
},
在执行http请求的每项服务中,我都使用该属性名称进行请求。
axios.get(http://myapp_1)
一个重要的细节是在更改容器后重建它!
docker build -t myapp .
当我再次运行docker-compose时,一切正常。