Docker无法解析主机名 我正在尝试将我的容器化VueJS前端与我的容器化Spring Boot API后端链接起来,这非常困难。
每当我尝试使用容器名称向我的API发出HTTP请求时,我都会得到以下结果 选项网络::错误\u名称\u未\u解析 这是我的Docker无法解析主机名 我正在尝试将我的容器化VueJS前端与我的容器化Spring Boot API后端链接起来,这非常困难。,docker,networking,docker-compose,Docker,Networking,Docker Compose,每当我尝试使用容器名称向我的API发出HTTP请求时,我都会得到以下结果 选项网络::错误\u名称\u未\u解析 这是我的docker compose文件: version: "3" services: mongodb: image: mongo container_name: mongo ports: - "27017:27017" api: image: registry.gitlab.com/darragh.oflah/api:late
docker compose
文件:
version: "3"
services:
mongodb:
image: mongo
container_name: mongo
ports:
- "27017:27017"
api:
image: registry.gitlab.com/darragh.oflah/api:latest
container_name: api
ports:
- "4505:4505"
links:
- mongodb
web:
image: registry.gitlab.com/darragh.oflah/web:latest
container_name: web
ports:
- "80:8080"
links:
- api
这里是我运行sudo docker network inspect tmp\u default时得到的
因此,网络似乎设置正确
[
{
"Name": "tmp_default",
"Id": "75ab7c89cb5a80aa7eddd7c5a3f7f4aafb911cfe96a923ad3db2219552366fd7",
"Created": "2020-02-04T16:55:49.131485109Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"6ae3db08be2ed22245a173a677ae1b0f28eca878aa84e43744a320589cbda5af": {
"Name": "mongo",
"EndpointID": "b399bb72f28b6d47a93927712a665dcc725d27a6ba2ee432e715db00c9cbc835",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
},
"fa7e4066e436181ce2991e048790f8de518af31fb97cf9351316ff8f41824449": {
"Name": "api",
"EndpointID": "bf8d071683bfa4ecbd215f3dd534d0e278702ed4377552ef242e5c65b01c3fa1",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
},
"fb544ef5389afd74d53f45d6de968008632b65340f161527a9c7aa4214aa7674": {
"Name": "web",
"EndpointID": "2dc3e8a452c241916a2e9f7e25b33ee7997fe2d25ec3543e5d34e888e50d905c",
"MacAddress": "02:42:ac:12:00:04",
"IPv4Address": "172.18.0.4/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "default",
"com.docker.compose.project": "tmp",
"com.docker.compose.version": "1.21.2"
}
}
]
在Network选项卡中,请求显示为failed,这将向我指示请求根本无法离开容器
您的撰写文件将创建一个docker网络。您正在网络上的容器中运行“web”。docker网络中的所有容器都可以通过主机名访问其他容器。但是,浏览器正在主机上运行。您的主机不在docker网络中。因此,您的浏览器将无法通过主机名访问api容器。如果您键入http://api:4505/user/sign-在浏览器url栏中输入
时,它也在执行相同的操作,您也会收到一个错误。所以您在容器中运行“web”,但浏览器在主机上运行,对吗?因此,在主机上运行的浏览器无法理解如何解析http://api:4505/user/sign-在
中。如果您键入http://api:4505/user/sign-在
浏览器url栏中,我想您也会遇到一个错误。浏览器正在我的机器上运行,docker compose正在AWS ubuntu实例上运行。我认为docker的工作原理是为您的每个容器创建DNS,这样您就可以按名称引用它们。您可以在同一网络中按名称引用,但您机器上运行的浏览器不在docker网络中。对,因此我必须在生产时使用AWS主机的IP是的,这是正确的。我留下我的评论作为回答。