PankovAlxndr
@PankovAlxndr
Fullstack web developer

Почему не могу достучаться до контейнера с node?

Поднимаю проект laravel в докере, на дев машине.

Все всегда работало, прилагаю листинг компоуз файла (много лишнего, тут но не суть)
version: "3.8"
services:
    traefik:
        container_name: wb_traefik
        image: traefik:latest
        command:
            - --providers.docker
            - --providers.docker.exposedByDefault=false
            - --providers.file.filename=/etc/traefik/traefik-certs.yml
            - --providers.file.watch=true
            - --entrypoints.http.address=:80
            - --entrypoints.https.address=:443
            - --api.dashboard=true
            - --api.insecure=true
        ports:
            - "80:80"
            - "8080:8080"
            - "443:443"
        volumes:
            - "/var/run/docker.sock:/var/run/docker.sock:ro"
            - "./docker/treafik/traefik-certs.yml:/etc/traefik/traefik-certs.yml"
            - "./docker/treafik/certs:/etc/traefik/certs"

    frontend:
        container_name: wb_frontend
        build:
            context: docker
            dockerfile: nginx/development/frontend/Dockerfile
        volumes:
            - ./frontend:/app
        labels:
            - "traefik.enable=true"
            - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
            - "traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true"
            - "traefik.http.services.frontend.loadBalancer.server.port=80"
            - "traefik.http.routers.frontend.entrypoints=http"
            - "traefik.http.routers.frontend.rule=Host(`wb.loc`)"
            - "traefik.http.routers.frontend.middlewares=redirect-to-https"
            - "traefik.http.routers.frontend-secure.entrypoints=https"
            - "traefik.http.routers.frontend-secure.rule=Host(`wb.loc`)"
            - "traefik.http.routers.frontend-secure.tls=true"

    frontend-node:
        container_name: wb_frontend_node
        build:
            context: docker
            dockerfile: node/development/Dockerfile
        volumes:
            - ./frontend:/app
        command: npm run dev
        tty: true
        labels:
            - "traefik.enable=true"
            - "traefik.http.routers.vitesocket.service=vitesocket"
            - "traefik.http.services.vitesocket.loadbalancer.server.port=24678"
            - "traefik.http.routers.vitesocket.rule=Host(`wb.loc`) && PathPrefix(`/_nuxt/hmr/`)"
            - "traefik.http.routers.vitesocket.entrypoints=https"
            - "traefik.http.routers.vitesocket.tls=true"

    frontend-node-cli:
        container_name: wb_frontend_node_cli
        build:
            context: docker
            dockerfile: node/development/Dockerfile
        volumes:
            - ./frontend:/app

    backend:
        build:
            context: docker
            dockerfile: nginx/development/backend/Dockerfile
        container_name: wb_backend
        volumes:
            - ./application:/app
        depends_on:
            - mysql
            - api-php-fpm
        labels:
            - "traefik.enable=true"
            - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
            - "traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true"

            - "traefik.http.routers.backend.entrypoints=http"
            - "traefik.http.routers.backend.rule=Host(`api.wb.loc`)"
            - "traefik.http.routers.backend.middlewares=redirect-to-https"
            #- "traefik.http.services.frontend.loadBalancer.server.port=80"

            - "traefik.http.routers.backend-secure.entrypoints=https"
            - "traefik.http.routers.backend-secure.rule=Host(`api.wb.loc`)"
            - "traefik.http.routers.backend-secure.tls=true"

    api-php-cli:
        build:
            context: docker
            dockerfile: php-cli/development/Dockerfile
            args:
                - UID=${UID:-1000}
                - GID=${GID:-1000}
                - USER=${USER:-app}
        container_name: wb_php_cli
        environment:
            APP_ENV: local
            APP_DEBUG: true
            APP_URL: ${APP_URL}
            DB_HOST: ${DB_HOST}
            DB_PORT: ${DB_PORT}
            DB_DATABASE: ${DB_DATABASE}
            DB_USERNAME: ${DB_USERNAME}
            DB_PASSWORD: ${DB_PASSWORD}
            SANCTUM_STATEFUL_DOMAINS: ${SANCTUM_STATEFUL_DOMAINS}
            SESSION_DOMAIN: ${SESSION_DOMAIN}
            DOLPHIN_TOKEN: ${DOLPHIN_TOKEN}
            DOLPHIN_MAX_PROFILES: ${DOLPHIN_MAX_PROFILES}
            REDIS_HOST: ${REDIS_HOST}
            REDIS_PORT: ${REDIS_PORT}
            CHECK_IP_URL: ${CHECK_IP_URL}
            SMS_TOKEN: ${SMS_TOKEN}
            RUCAPTCHA_TOKEN: ${RUCAPTCHA_TOKEN}
            VK_PROTECTED_KEY: ${VK_PROTECTED_KEY}
            DADATA_TOKEN: ${DADATA_TOKEN}
            DADATA_SECRET: ${DADATA_SECRET}
        volumes:
            - ./application:/app
        depends_on:
            - mysql

    api-php-fpm:
        build:
            context: docker
            dockerfile: php-fpm/development/Dockerfile
            args:
                - UID=${UID:-1000}
                - GID=${GID:-1000}
                - USER=${USER:-app}
        container_name: wb_php_fpm
        environment:
            APP_ENV: local
            APP_DEBUG: true
            APP_URL: ${APP_URL}
            DB_HOST: ${DB_HOST}
            DB_PORT: ${DB_PORT}
            DB_DATABASE: ${DB_DATABASE}
            DB_USERNAME: ${DB_USERNAME}
            DB_PASSWORD: ${DB_PASSWORD}
            SANCTUM_STATEFUL_DOMAINS: ${SANCTUM_STATEFUL_DOMAINS}
            SESSION_DOMAIN: ${SESSION_DOMAIN}
            DOLPHIN_TOKEN: ${DOLPHIN_TOKEN}
            DOLPHIN_MAX_PROFILES: ${DOLPHIN_MAX_PROFILES}
            REDIS_HOST: ${REDIS_HOST}
            REDIS_PORT: ${REDIS_PORT}
            CHECK_IP_URL: ${CHECK_IP_URL}
            SMS_TOKEN: ${SMS_TOKEN}
            RUCAPTCHA_TOKEN: ${RUCAPTCHA_TOKEN}
            VK_PROTECTED_KEY: ${VK_PROTECTED_KEY}
            DADATA_TOKEN: ${DADATA_TOKEN}
            DADATA_SECRET: ${DADATA_SECRET}
        volumes:
            - ./application:/app
        depends_on:
            - mysql

    mysql:
        image: "mysql/mysql-server:8.0"
        command: --default-authentication-plugin=mysql_native_password
        container_name: wb_mysql
        environment:
            MYSQL_DATABASE: ${DB_DATABASE}
            MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
            MYSQL_USER:  ${DB_USERNAME}
            MYSQL_PASSWORD: ${DB_PASSWORD}
        ports:
            - "3306:3306"
        volumes:
            - db_data:/var/lib/mysql

    redis:
        image: "redis:7-alpine3.17"
        container_name: wb_redis
        ports:
            - "6379:6379"
        volumes:
          - redis_data:/usr/local/etc/redis

volumes:
    db_data:
        name: wb_db_data
    redis_data:
        name: wb_redis_data

networks:
    default:
        name: wb_network
        driver: bridge


Суть такая, что есть nginx для фронта и nginx для бека, разруливается входящий запрос через traefik, вообще все работало до того как я решил обновить node-modules зависимости... сейчас я получаю ошибку...

Эта ошибка в контейнере nginx для фронта, те когда я делаю запрос из браузера, traefik верно делегирует его контейнеру с nginx (ну да, я вообще не правил никаких конфигов), а nginx должен прокинуть запрос на ноду, но не получает ответ от контейнера с нодой...
192.168.16.4 - - [16/Sep/2023:09:04:56 +0000] "GET /favicon.ico HTTP/1.1" 502 552 "https://wb.loc/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36" "192.168.16.1"

2023-09-16T09:04:56.659849734Z 2023/09/16 09:04:56 [error] 40#40: *8 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.16.4, server: , request: "GET / HTTP/1.1", upstream: "http://192.168.16.3:3000/", host: "wb.loc"


внутри nginx у меня такой конфиг
location / {
        set $upstream http://frontend-node:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass $upstream;
        proxy_redirect off;
    }

те я проксирую на запущенную ноду, ранее все работало....
ip адреса верные, контейнер проинспектировал, те в DNS проблем нет
Зашел в контейнер с нодой там пробрал curl localhost:3000 - увидел верстку (те dev сервер висит на 3000 порту в контейнере).. wtf?
зашел в nginx контейнер, там пинганул ip ping 192.168.16.3 (контейнер с node) - все хорошо, но до 3000 порта не достучаться, почему, что не так? (теперь дев сервер стартует как-то иначе... да вроде нет)

образ ноды у меня FROM node:19.6-alpine3.17, работает от юзера node (1000)
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы