Docker NGINX容器无法解析主机
我遇到了一个奇怪的问题,docker无法解决我的一个网络Docker NGINX容器无法解析主机,docker,docker-compose,docker-networking,Docker,Docker Compose,Docker Networking,我遇到了一个奇怪的问题,docker无法解决我的一个网络 version: "3.5" services: nginx: container_name: nginx_al image: nginx:latest volumes: - ./ssl:/ssl/ - ./ng
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文件,因为它包含敏感信息,我知道问题并非由此产生的。如果我跑curlhttp://backend:4000/graphql (我在服务器contaner中运行了一个node.js服务器)。curl将以
curl(6)无法解析主机:后端
但是,如果我尝试卷曲KeyClope,则不会有问题
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"
}
}
]
重要信息缺失,但我猜:
- KeyClope是一个网络和一个容器。如果你卷起keydepate,你会从容器中得到答案,而不是网络
- 而后端是一个网络而不是一个容器。那么谁来回答这个问题呢
如果您想访问您的al_后端_服务器容器,请尝试curl server谢谢您的帮助!现在有点困惑了,因为我认为“http:/WHATEVER”实际上是网络名,而不是容器名。可能需要做更多的研究,就像一个真实的网络。您可以有不同的子网(“网桥网络”),它们在物理上与您的“主机网络”分离。作为网络成员的每个容器的行为类似于此网络上的真实设备。它获得IP和MAC地址,并通过网关进行通信。因此,除了您打开的端口(-p或“端口:”)之外,它还与主机分离,但可以在其网络内完全通信,而无需打开任何端口。因为在IP上乱搞不是很方便,所以有一个Docker DNS正在将容器名称转换为IP,所以您可以通过名称访问它。