Назад | Перейти на главную страницу

Несколько стеков с одним и тем же контейнером: «порт уже используется в качестве входного порта»

Я пытаюсь добиться следующей настройки:

у меня есть центральная стойка содержащий мой nginx-прокси прочее. Этот стек объявляет сеть (назовем ее nginx_proxy_net)

Далее я хочу настроить 2 стопки для 2 Wordpress устанавливает, каждый из них полностью независим и содержит свой wordpress служба & mysql служба. Обе wordpress использовать nginx_proxy_net сеть.

Когда я пытаюсь запустить свои 2 стека, происходит следующее:

  1. Первый стек WordPress запускается успешно. Пока все хорошо
  2. Второй стек WordPress отказывается запускаться, потому что порт 3306 (mysql) уже используется. Ошибка: Error response from daemon: rpc error: code = 3 desc = port '3306' is already in use by service 'mywp1_mysql' (qzcqsfvoj3ga2nte11rj3qgum) as an ingress port

Я понял, что каждый экспортируемый порт привязан к сетка маршрутизации, и я также понял, что вы можете связать свою службу в нескольких сетях. Итак, я попытался создать сеть для каждого стека, поэтому в каждой из этих сетей стеков есть один MySQL и один Apache / Wordpress.

Вот мой стек Wordpress mywp1 docker-compose.yml:

version: "3"
services:
  web:
    depends_on:
      - mysql
    image: wordpress:4.8-apache
    depends_on:
      - mysql
    ports:
      - 79:80
    volumes:
      - ./data/wordpress:/var/www/html
    networks:
      - mywp1_webnet
      - nginx-proxy
  mysql:
    image: mysql
    ports:
      - 3306:3306
    volumes:
      - ./data/mysql:/var/lib/mysql
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - mywp1_webnet
networks:
  mywp1_webnet:
  nginx-proxy:
    external:
      name: nginx_proxy_default

Вот это mywp2

version: "3"
services:
  web:
    depends_on:
      - mysql
    image: wordpress:4.8-apache
    depends_on:
      - mysql
    ports:
      - 78:80
    volumes:
      - ./data/wordpress:/var/www/html
    networks:
      - mywp2_webnet
      - nginx-proxy
  mysql:
    image: mysql
    ports:
      - 3306:3306
    volumes:
      - ./data/mysql:/var/lib/mysql
    deploy:
      placement:
        constraints: [node.role == manager]
    networks:
      - mywp2_webnet
networks:
  mywp2_webnet:
  nginx-proxy:
    external:
      name: nginx_proxy_default

Я не очень разбираюсь в Docker, поэтому, возможно, я собираюсь спросить что-то действительно глупое: можно ли открыть мои порты только на моих стеках сети, а не на ингресс? Я хотел бы, насколько это возможно, сохранить значения по умолчанию.

Здесь возникает вопрос: можно ли сохранить оба экземпляра mysql с портами по умолчанию, не мешая друг другу?

Большое спасибо, хорошего дня

Alex

Вам не нужно публиковать порты ни в одном из файлов mywp * compose. Вы можете использовать обратный прокси-сервер для доступа к веб-сайту, и вы не должны попадать в свою базу данных извне контейнеров. Nginx-proxy хорош для кластера с одним узлом, но еще не уверен, что он был обновлен для режима роя, поэтому вы можете рассмотреть возможность использования прокси с поддержкой роя, такого как traefik.

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