Как я могу запустить маршрутизатор mysql в Docker с помощью файла compose в режиме начальной загрузки
У MySql Router есть команда для самозагрузки
mysqlrouter --bootstrap root@127.0.0.1:3306 --directory /tmp/router
После начальной загрузки маршрутизатор выйдет, и мы должны снова запустить его с файлом конфигурации, созданным при начальной загрузке, так как я изменю этот файл.
mysqlrouter --config /tmp/router/mysqlrouter.conf
Он работает нормально в чистой среде Linux, но не в докере, ниже мой файл компоновки докеров
version: '2'
services:
common: &baseDefine
environment:
MYSQL_HOST: "192.168.213.6"
MYSQL_PORT: 3306
MYSQL_USER: 'root'
MYSQL_PASSWORD: 'urpwd.root'
MYSQL_INNODB_CLUSTER_MEMBERS: 3
MYSQL_CREATE_ROUTER_USER: 0
image: "docker.io/mysql/mysql-router:latest"
volumes:
- "./conf:/tmp/myrouter"
network_mode: "host"
boot:
container_name: "mysql_router_boot"
command: ["mysqlrouter","--bootstrap","root@192.168.213.7:3306","--directory","/tmp/myrouter","--conf-use-sockets","--conf-skip-tcp",
"--force","--strict","--user","mysqlrouter","--account","sqlrouter","--account-create","if-not-exists"]
<<: *baseDefine
run:
container_name: "mysql_router"
restart: always
command: ["mysqlrouter","--config","/tmp/myrouter/mysqlrouter.conf"]
<<: *baseDefine
Сначала я вызову службу загрузки для начальной загрузки и сгенерирую конфигурацию для указанного каталога.
docker-compose run --rm boot
после этой команды файл конфигурации создается нормально, затем я выполняю
docker-compose run --name mysql_router run
Он будет работать, но не так, как я предполагал. Без докера второй шаг для запуска mysqlrouter использует только конфигурацию и без начальной загрузки. Но с докером и этими командами второй шаг снова загрузится. Я знаю это с тех пор, как 2 сервиса в 2 контейнерах. Есть ли идеи сделать этот поток более подходящим? Например запустить 2 сервиса в одном контейнере? Или запустить сервис в уже существующем контейнере?
1 ответ
Это нормально с нижеследующим:
изменить команду yml для запуска службы
run:
command: /bin/bash -c "mysqlrouter --config /tmp/myrouter/mysqlrouter.conf"
используйте bash для запуска задержки mysqlrouter для распознавания существующего файла conf; оно работает