Я пытаюсь добиться следующей настройки:
у меня есть центральная стойка содержащий мой nginx-прокси прочее. Этот стек объявляет сеть (назовем ее nginx_proxy_net
)
Далее я хочу настроить 2 стопки для 2 Wordpress устанавливает, каждый из них полностью независим и содержит свой wordpress
служба & mysql
служба. Обе wordpress
использовать nginx_proxy_net
сеть.
Когда я пытаюсь запустить свои 2 стека, происходит следующее:
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.
Если по какой-то причине вам нужно напрямую подключиться к вашей базе данных извне вашего кластера роя, вам нужно будет предоставить каждому приложению свой собственный порт. Запуск нескольких приложений на одном и том же порту не поддерживается вне докера, поэтому он также не поддерживается внутри докера.