Docker NGINX 容器无法解析主机

时间:2021-04-09 05:11:03

标签: docker docker-compose docker-networking

我遇到了一个奇怪的问题,即 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) 无法解析主机:后端

但是,如果我尝试卷曲 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"
        }
    }
]

1 个答案:

答案 0 :(得分:0)

缺少重要信息,但我猜:

  • keycloak 是一个网络和一个容器。如果您 curl keycloak,您将从容器中得到答案,而不是网络。
  • 虽然后端是网络而不是容器。那么谁应该回答这个问题?

如果你想在 nginx 后面找到一些东西,没有 conf(可以被剥离),这将是一个疯狂的猜测。 如果你想访问你的 al_backend_server-Container 试试 curl server

相关问题