1. #!/bin/bash
    2. # author: acdiost
    3. set -e
    4. if [ "$1" = 'mysqlrouter' ]; then
    5. if [[ -z $MASTER_HOST || -z $SLAVE_HOST ]]; then
    6. echo "We require all of"
    7. echo " MASTER_HOST"
    8. echo " SLAVE_HOST"
    9. echo "run command: docker run -dit -e MASTER_HOST='1.2.3.4:3306' -e SLAVE_HOST='2.2.3.4:3306,3.2.3.4:3306' -p 6446:6446 -p 6447:6447 mysql-router"
    10. echo "configuration: /etc/mysqlrouter/mysqlrouter.conf"
    11. echo "to be set. Exiting."
    12. exit 1
    13. fi
    14. CONFIGFILE=/etc/mysqlrouter/mysqlrouter.conf
    15. # 主从模式
    16. cat >"$CONFIGFILE" <<EOF
    17. [DEFAULT]
    18. logging_folder = /var/log/mysqlrouter
    19. runtime_folder = /var/run/mysqlrouter
    20. config_folder = /etc/mysqlrouter
    21. [logger]
    22. level = INFO
    23. [routing:masters]
    24. bind_address = 0.0.0.0
    25. bind_port = 6446
    26. destinations = $MASTER_HOST
    27. mode = read-write
    28. [routing:slaves]
    29. bind_address = 0.0.0.0
    30. bind_port = 6447
    31. destinations = $SLAVE_HOST
    32. mode = read-only
    33. EOF
    34. ## 简单模式
    35. # cat >"$CONFIGFILE" <<EOF
    36. # [DEFAULT]
    37. # logging_folder = /var/log/mysqlrouter
    38. # runtime_folder = /var/run/mysqlrouter
    39. # config_folder = /etc/mysqlrouter
    40. # [logger]
    41. # level = INFO
    42. # [routing:basic_failover]
    43. # bind_address = 0.0.0.0
    44. # bind_port = 6446
    45. # mode = read-write
    46. # destinations = $MASTER_HOST
    47. # EOF
    48. exec "$@" --config $CONFIGFILE
    49. fi
    50. exec "$@"
    1. FROM mysql/mysql-router
    2. COPY run.sh /run.sh
    3. HEALTHCHECK \
    4. CMD mysqladmin --port 6446 --protocol TCP ping 2>&1 | grep Access || exit 1
    5. EXPOSE 6446 6447 64460 64470
    6. ENTRYPOINT ["/run.sh"]
    7. CMD ["mysqlrouter"]