docker - (Google Compute VM)如何在 docker-compose 中获取容器进行连接
问题描述
我试图让 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
我已经阅读了文档和许多诸如此类的帖子,并且了解 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 容器上测试端口,它似乎在那里:
$ sudo docker port nodejs
8080/tcp -> 0.0.0.0:8080
编辑:我开始认为这是一个谷歌计算 VM 问题,因为我在本地 linux 机器上运行它没有任何问题......已相应更新了标题
解决方案
您需要确保它们在同一个网络上。您可以通过在最后的撰写文件中添加以下行来做到这一点
networks:
default:
external:
name: project.local
请注意,您必须创建project.local
网络。当你运行docker-compose up
它会告诉你如何去做。
推荐阅读
- postgresql - Workbench - postgresql如何刷新表
- swift - 跳转到特定的视图控制器 xcode
- angular - 如何避免使用ngModel
- mysql - 无法启动 MySQL 容器并将其附加到 Docker 网络
- sql - 根据表 1 的值,从多个表中找到两个重复值
- eclipse - 在 Zoom 中共享 Eclipse 窗口
- python - Pycharm venv 包对我不可用?
- c++ - 编写一个应该以 root 身份运行的 c++ linux 程序
- python - 来自共现矩阵的 Scipy 相关矩阵(用于通过社区检测进行主题建模)
- tensorflow - 在预训练网络中间添加 dropout