【问题标题】:How to auto select MySQL database on Docker start?如何在 Docker 启动时自动选择 MySQL 数据库?
【发布时间】:2019-11-21 06:59:55
【问题描述】:

我们目前正在尝试寻找一种更高效的方式来处理 MySQL docker 启动过程,目前有以下几种:

FROM mysql

ENV MYSQL_DATABASE marsdb

COPY ./src/main/resources/ /docker-entrypoint-initdb.d/

echo "Building database image..."
docker build -t marsdb -f Dockerfile.marsdb .

echo "Starting database and removing old database container."
docker rm -f marssql
docker run -d -p 3306:3306 --name marssql -e MYSQL_ROOT_PASSWORD=pass marsdb

此设置的问题如下:容器启动后,当前必须手动进入容器并选择数据库,在本例中为 marsdb,如下所示:

docker exec -it marssql bin/bash
mysql -u root -p
pass
use marsdb;

有没有办法在容器启动后自动选择数据库?

【问题讨论】:

    标签: mysql docker


    【解决方案1】:

    将数据库名称传递给命令怎么样,这样您就不需要切换

    mysql -u root -ppass marsdb
    #or
    docker exec -it marssql bin/bash -c "mysql -u root -ppass marsdb"
    
    

    或者如果您不确定 DB,那么您可以尝试使用默认的 DB 环境变量运行容器。在此 MySQL 将自动创建创建 DB 并将针对此 DB 运行入口点脚本。

    docker run -it --rm  --name marssql -e DEFAULT_DB=marsedb -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_DATABASE=marsedb mysql
    

    然后你可以像这样连接

    docker exec -it marssql bin/bash -c "mysql -u root -ppass $DEFAULT_DB"
    
    

    MYSQL_DATABASE

    这个变量是可选的,允许你指定一个名字 要在映像启动时创建的数据库。如果用户/密码是 提供(见下文)然后该用户将被授予超级用户访问权限 (对应于 GRANT ALL)到这个数据库。 MySQL docker Environment Variables

    【讨论】:

    • 谢谢,我可以使用以下方法解决它:docker exec -it marssql bin/bash -c "mysql -uroot -ppass marsdb"
    【解决方案2】:

    我认为您应该考虑在启动容器时不要这样做。当从任何使用它的应用程序连接到数据库时,您可以在连接字符串中指定要处理的数据库。

    尝试阅读以下答案:How do I set the default schema for a user in MySQL

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 2016-02-28
      • 1970-01-01
      相关资源
      最近更新 更多