首页 > 解决方案 > 如何在 Docker 启动时自动选择 MySQL 数据库?

问题描述

我们目前正在尝试寻找一种更有效的方式来处理 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;

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

标签: mysqldocker

解决方案


将数据库名称传递给命令怎么样,所以你不需要切换

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

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

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 环境变量


推荐阅读