Как я могу запустить маршрутизатор 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; оно работает

Другие вопросы по тегам