Docker Compose - соедините два контейнера с отдельными файлами compose и перенаправьте один порт с хоста на один контейнер - PullRequest
0 голосов
/ 17 мая 2019

Я начал с одного составного файла, который содержал все мои службы, которые я хочу запустить.Чтобы иметь возможность перестраивать и запускать их независимо друг от друга, я хочу, чтобы каждый из них имел свой собственный файл компоновки.

В качестве тестовой установки я использую два сервера nginx.Один для сервера страницы и один, который действует как прокси для сервера nginx со страницей.

Если я просто разделю составные файлы, другой сервер nginx больше не будет доступен.Чтобы подключить их снова, я создал собственную сеть «сервисов» и прикрепил к ней все контейнеры.В результате прокси-сервер nginx может снова найти nginx со страницей (в других случаях я получаю ошибку, потому что другой nginx недоступен).К сожалению, переадресация портов, кажется, отключена в моей конфигурации.Если я закомментирую определение сети, сопоставление портов будет работать нормально.

Я попытаюсь найти решение для подключения обоих контейнеров nginx, а также возможности настройки перенаправления портов с хоста на один контейнер.

Когда я создал сеть с помощью portainer (также пытался напрямую с помощью docker cli), я определил сеть как внешнюю.

Файл компоновки nginx со страницей:

version: '3'

services:
  nginx2:
    container_name: 'nginx2'
    restart: unless-stopped
    image: nginx:latest
    networks:
      - services
    expose:
      - "80"
    ports:
      - "8092:80"
    volumes:
      - ./conf/default.conf:/etc/nginx/conf.d/default.conf
      - ./conf/index.html:/usr/share/nginx/html/index.html
      - ./data/log:/var/log/nginx

networks:
  services:
    external: true

Файл составления nginx, который действует как прокси-сервер:

version: '3'

services:
  nginx1:
    container_name: 'nginx1'
    restart: unless-stopped
    image: nginx:latest
    expose:
      - "80"
    ports:
      - "8091:80"
    networks:
      - services
    volumes:
      - ./conf/default.conf:/etc/nginx/conf.d/default.conf
      - ./conf/index.html:/usr/share/nginx/html/index.html
      - ./data/log:/var/log/nginx

networks:
  services:
    external: true

Параметр прокси-сервера nginx:

proxy_pass      http://nginx2;

Определение сети:

name: services
scope: local
Driver: ridge
Attachable: true
Internal: true
IPAM Driver: default
IPAM Subnet: 192.168.33.0/20
IPAM Gateway: 192.168.32.1

Это действительно будетбыло бы здорово, если бы кто-то мог указать мне, что мне не хватает, чтобы соединить оба контейнера и иметь переадресацию портов для одного контейнера одновременно.

1 Ответ

0 голосов
/ 17 мая 2019

Я понял это.Файлы составления верны.

Проблема была в неправильном определении сети.Мои "службы" были определены с параметром "Внутренний", установленным в "true".Это отключает переадресацию портов.

При сетевом параметре "Internal", установленном на "false", все работает как положено.

Здесь полная конфигурация сети

name: services
scope: local
Driver: ridge
Attachable: true
Internal: false
IPAM Driver: default
IPAM Subnet: 192.168.33.0/20
IPAM Gateway: 192.168.32.1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...