Docker NGINX 容器无法解析主机
Docker NGINX container cannot resolve host
我遇到了一个奇怪的问题,docker 无法解析我的网络之一
version: "3.5"
services:
nginx:
container_name: nginx_al
image: nginx:latest
volumes:
- ./ssl:/ssl/
- ./nginx.conf:/etc/nginx/nginx.conf:ro
ports:
- "80:80"
- "443:443"
- "8080:8080"
depends_on:
- keycloak
- server
- admin
- client
networks:
- client
- admin
- backend
- keycloak
keycloak:
container_name: keycloak_al
image: jboss/keycloak:11.0.1
env_file:
- ".keycloak.env"
restart: unless-stopped
networks:
- keycloak
- postgres
server:
container_name: al_backend_server
image: databending/al-backend
depends_on:
- keycloak
- postgres
networks:
- backend
- keycloak
- postgres
volumes:
- images-data:/app/server/public
- ./.server.env:/app/server/.env
postgres:
container_name: al_postgres
image: postgres
env_file:
".postgres.env"
networks:
- postgres
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
- postgres-data:/var/lib/postgresql/data
restart: unless-stopped
admin:
networks:
- admin
container_name: al_admin
image: databending/admin-panel
volumes:
- ./config.json:/usr/share/nginx/html/config.json
- ./.client.env:/usr/share/nginx/html/.env
client:
networks:
- client
container_name: al_client
image: databending/al-client
volumes:
- ./.client.js:/usr/share/nginx/html/__snowpack__/env.js
volumes:
images-data:
driver: local
postgres-data:
driver: local
networks:
postgres:
driver: bridge
keycloak:
driver: bridge
client:
driver: bridge
admin:
driver: bridge
backend:
driver: bridge
我不会粘贴 nginx.conf 文件,因为它包含敏感信息,而且我知道问题并非源于此。如果我 运行 curl http://backend:4000/graphql (我有一个 node.js 服务器在服务器容器中 运行 )。 curl 将响应
curl(6) 无法解析主机:后端
但是,如果我尝试 curl keycloak,没问题
Docker网络检查
[
{
"Name": "app_backend",
"Id": "e2793e3df1ddfa000f537b9ad18f5ed0409d9cf4c235f07634fe039dbe551d0b",
"Created": "2021-04-09T05:03:35.417548053Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.25.0.0/16",
"Gateway": "172.25.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"f0d69bc1ca28b459147d06bff2b6938c5e85c2efd1e8e015c3f3857ef60cc780": {
"Name": "nginx_al",
"EndpointID": "86875b4fadba913e3db9060fc1b4a1e462e455b2fda87847db71ecccfd7cbd3d",
"MacAddress": "02:42:ac:19:00:03",
"IPv4Address": "172.25.0.3/16",
"IPv6Address": ""
},
"fa79b46119905035f404026958cdad3cf5a024f25072a778ad7085503d70fb44": {
"Name": "al_backend_server",
"EndpointID": "239837a5197d1a6c02df6ea326a710d884983edd4fc5b8f2b7f514c95b7cffe6",
"MacAddress": "02:42:ac:19:00:02",
"IPv4Address": "172.25.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "backend",
"com.docker.compose.project": "app",
"com.docker.compose.version": "1.28.6"
}
}
]
缺少重要信息,但我猜:
- keycloak是一个网络,也是一个容器。如果你 curl keycloak 你将从容器而不是网络得到答案。
- 虽然后端是网络而不是容器。那么谁应该回答卷曲?
如果你想触及 nginx 背后的东西,没有 conf(可以被剥离),那将是一个疯狂的猜测。
如果你想连接到你的 al_backend_server-Container 试试 curl server
我遇到了一个奇怪的问题,docker 无法解析我的网络之一
version: "3.5"
services:
nginx:
container_name: nginx_al
image: nginx:latest
volumes:
- ./ssl:/ssl/
- ./nginx.conf:/etc/nginx/nginx.conf:ro
ports:
- "80:80"
- "443:443"
- "8080:8080"
depends_on:
- keycloak
- server
- admin
- client
networks:
- client
- admin
- backend
- keycloak
keycloak:
container_name: keycloak_al
image: jboss/keycloak:11.0.1
env_file:
- ".keycloak.env"
restart: unless-stopped
networks:
- keycloak
- postgres
server:
container_name: al_backend_server
image: databending/al-backend
depends_on:
- keycloak
- postgres
networks:
- backend
- keycloak
- postgres
volumes:
- images-data:/app/server/public
- ./.server.env:/app/server/.env
postgres:
container_name: al_postgres
image: postgres
env_file:
".postgres.env"
networks:
- postgres
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
- postgres-data:/var/lib/postgresql/data
restart: unless-stopped
admin:
networks:
- admin
container_name: al_admin
image: databending/admin-panel
volumes:
- ./config.json:/usr/share/nginx/html/config.json
- ./.client.env:/usr/share/nginx/html/.env
client:
networks:
- client
container_name: al_client
image: databending/al-client
volumes:
- ./.client.js:/usr/share/nginx/html/__snowpack__/env.js
volumes:
images-data:
driver: local
postgres-data:
driver: local
networks:
postgres:
driver: bridge
keycloak:
driver: bridge
client:
driver: bridge
admin:
driver: bridge
backend:
driver: bridge
我不会粘贴 nginx.conf 文件,因为它包含敏感信息,而且我知道问题并非源于此。如果我 运行 curl http://backend:4000/graphql (我有一个 node.js 服务器在服务器容器中 运行 )。 curl 将响应
curl(6) 无法解析主机:后端
但是,如果我尝试 curl keycloak,没问题
Docker网络检查
[
{
"Name": "app_backend",
"Id": "e2793e3df1ddfa000f537b9ad18f5ed0409d9cf4c235f07634fe039dbe551d0b",
"Created": "2021-04-09T05:03:35.417548053Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.25.0.0/16",
"Gateway": "172.25.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"f0d69bc1ca28b459147d06bff2b6938c5e85c2efd1e8e015c3f3857ef60cc780": {
"Name": "nginx_al",
"EndpointID": "86875b4fadba913e3db9060fc1b4a1e462e455b2fda87847db71ecccfd7cbd3d",
"MacAddress": "02:42:ac:19:00:03",
"IPv4Address": "172.25.0.3/16",
"IPv6Address": ""
},
"fa79b46119905035f404026958cdad3cf5a024f25072a778ad7085503d70fb44": {
"Name": "al_backend_server",
"EndpointID": "239837a5197d1a6c02df6ea326a710d884983edd4fc5b8f2b7f514c95b7cffe6",
"MacAddress": "02:42:ac:19:00:02",
"IPv4Address": "172.25.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "backend",
"com.docker.compose.project": "app",
"com.docker.compose.version": "1.28.6"
}
}
]
缺少重要信息,但我猜:
- keycloak是一个网络,也是一个容器。如果你 curl keycloak 你将从容器而不是网络得到答案。
- 虽然后端是网络而不是容器。那么谁应该回答卷曲?
如果你想触及 nginx 背后的东西,没有 conf(可以被剥离),那将是一个疯狂的猜测。 如果你想连接到你的 al_backend_server-Container 试试 curl server