mysql - 如何在 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;
有没有办法在容器启动后自动选择数据库?
解决方案
将数据库名称传递给命令怎么样,所以你不需要切换
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 环境变量