我试图让docker-compose中的angular和nginx容器在google-compute vm实例(Debian OS)上互相对话,但没有成功。 这是我的docker-compose.yml。
version: '3'
services:
angular:
container_name: angular
hostname: angular
build: project-frontend
ports:
- "80:80"
#network_mode: host
nodejs:
container_name: nodejs
hostname: nodejs
build: project-backend
ports:
- "8080:8080"
# network_mode: host
我已经阅读了 文件 和众多的SO职位,如 这个的节点,并理解为angular应该是试图在 http:/nodejs:8080但我越来越。
POST http://nodejs:8080/login/ net::ERR_NAME_NOT_RESOLVED
当我做 docker networkk inspect
我看到这个
[
{
"Name": "project_default",
"Id": "2d1665ce09f712457e706b83f4ae1139a846f9ce26163e07ee7e5357d4b28cd3",
"Created": "2020-05-22T11:25:22.441164515Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": {},
"Config": [
{
"Subnet": "172.28.0.0/16",
"Gateway": "172.28.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"b0fceb913ef14b0b867ae01ce4852ad4a0827c06194102082c0d4b18d7b80464": {
"Name": "angular",
"EndpointID": "83fba04c3cf6f7af743cae87116730805d030040f286706029da1c7a687b199c",
"MacAddress": "02:42:ac:1c:00:03",
"IPv4Address": "172.28.0.3/16",
"IPv6Address": ""
},
"c181cd4b0e9ccdd793c4e1fc49067ef4880cda91228a10b900899470cdd1a138": {
"Name": "nodejs",
"EndpointID": "6da8ad2a83e2809f68c310d8f34e3feb2f4c19b40f701b3b00b8fb9e6f231906",
"MacAddress": "02:42:ac:1c:00:02",
"IPv4Address": "172.28.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
我不知道还有什么步骤可以帮助我调试。谢谢。
编辑:感谢 此职位 我试着通过angular容器ping nodejs容器成功。
$ sudo docker exec -it angular ping nodejs
PING nodejs (172.28.0.2): 56 data bytes
64 bytes from 172.28.0.2: seq=0 ttl=64 time=0.079 ms
64 bytes from 172.28.0.2: seq=1 ttl=64 time=0.105 ms
我也试过 测试端口 在nodejs constainer上,它似乎在那里。
$ sudo docker port nodejs
8080/tcp -> 0.0.0.0:8080
EDIT:我开始认为这是一个谷歌计算虚拟机的问题,因为我有它在我的本地linux盒子上运行,没有任何问题......已经相应地更新了标题。
你需要确保它们在同一个网络上。你可以通过在你的compose文件的最后添加以下几行来做到这一点
networks:
default:
external:
name: project.local
注意,您必须创建 project.local
网络。当你运行 docker-compose up
它会告诉你怎么做。
正如 @ShipluMokaddim 所说的,容器必须在同一个网络中,否则他们无法听到对方的声音,我建议创建一个新的网络。
version: '3'
services:
angular:
container_name: angular
build: project-frontend
ports:
- "80:80"
networks:
- mynetwork
nodejs:
container_name: nodejs
build: project-backend
ports:
- "8080:8080"
networks:
- mynetwork
networks:
mynetwork:
这样就可以了