Jeer
@Jeer
уверенный пользователь

Почему Nginx из докер композа не видит соседний контейнер?

Добрый день,
Пытаюсь на виртуалке развернуть nginx, так, чтобы html файлы отдавались из него, а апишка проксировалась на другой докер образ.
Так же я руками на виртуалке создаю для докера общую сеть (я пробовал по разному делать)
docker network create nginx-proxy-man

Nginx и база описаны в докер-композе
version: '3'

services:
  webserver:
    image: nginx:latest
    ports:
      - 80:80
      - 443:443
    restart: always
    volumes:
      - ./projects/web:/etc/nginx/html
      - ./nginx/conf:/etc/nginx/conf.d:ro
    networks:
      - nginx-proxy-man    # network outside
      - internal   # network internal

  database:
    image: mysql:8.0.30
    restart: always
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
    environment:
      MYSQL_ROOT_PASSWORD: "[type_root_password]"
      MYSQL_DATABASE: combatssharp
      MYSQL_USER: user_write
      MYSQL_PASSWORD: "[type_root_password]"
    ports:
      - "3317:3306"
    networks:
      - internal   # network internal
        
networks:
  nginx-proxy-man:
    external: true
  internal:
    internal: true


Вот файл nginx.conf
server {
    listen 80;
    listen [::]:80;

    server_name _;
    index index.html;
    
    location /api/ {
                proxy_pass              http://127.0.0.1:5050/api/;
    }
    
    location / {
        try_files $uri $uri/ /index.html =404;
    }
}


Образ апишки я запускаю так, он точно работает, точно внутри резолвится на порт 5050, так как по внешнему порту я бы ничего не увидел.
docker run --restart unless-stopped -p 5001:5050 -d --name api --network nginx-proxy-man projsharp-api:2023_04_02__19_52_17


Так же точно его эндпоинт, как и эндпоинт nginx-a находится в сети nginx-proxy-man, пробовал еще раз добавить по айдишникам контейнеров:
docker network connect nginx-proxy-man 9d57d25e82ef
Error response from daemon: endpoint with name firstvds-webserver-1 already exists in network nginx-proxy-man
docker network connect nginx-proxy-man aff5e5128941
Error response from daemon: endpoint with name api already exists in network nginx-proxy-man


Изнутри контейнера nginx-а не могу получить доступ на этот соседний контейнер
docker compose exec webserver curl http://127.0.0.1:5050/api/index.html
curl: (7) Failed to connect to 127.0.0.1 port 5050: Connection refused
  • Вопрос задан
  • 306 просмотров
Решения вопроса 2
karabanov
@karabanov Куратор тега Docker
Системный администратор
Замени 127.0.0.1 на имя сервиса - у каждого контейнера свой уникальный loopback интерфейс никак не связанный ни с системным ни с соседским.
Ответ написан
Комментировать
@dronmaxman
VoIP Administrator
docker run --restart unless-stopped -p 5001:5050 -d --name api --network nginx-proxy-man projsharp-api:2023_04_02__19_52_17


Зачем ты порт вытаскиваешь, если все равно подключаешь его в одну сеть nginx-proxy-man, -p можно убрать.

Поправить nginx конфиг

 location /api/ {
                proxy_pass              http://api:5050/api/;
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Tabletko
никого не трогаю, починяю примус
Изнутри контейнера nginx-а не могу получить доступ на этот соседний контейнер

Вы пишите про соседний контейнер, а в конфиге nginx обращается сам на себя
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы