Docker NGINX容器无法解析主机

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

我遇到了一个奇怪的问题,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文件,因为它包含敏感信息,我知道问题并非由此产生的。如果我跑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,你会从容器中得到答案,而不是网络
  • 而后端是一个网络而不是一个容器。那么谁来回答这个问题呢
如果您想了解nginx背后的内容,而不使用conf(可以剥离),那么这将是一个大胆的猜测。
如果您想访问您的al_后端_服务器容器,请尝试curl server

谢谢您的帮助!现在有点困惑了,因为我认为“http:/WHATEVER”实际上是网络名,而不是容器名。可能需要做更多的研究,就像一个真实的网络。您可以有不同的子网(“网桥网络”),它们在物理上与您的“主机网络”分离。作为网络成员的每个容器的行为类似于此网络上的真实设备。它获得IP和MAC地址,并通过网关进行通信。因此,除了您打开的端口(-p或“端口:”)之外,它还与主机分离,但可以在其网络内完全通信,而无需打开任何端口。因为在IP上乱搞不是很方便,所以有一个Docker DNS正在将容器名称转换为IP,所以您可以通过名称访问它。