mysql - 如何在Docker启动时自动选择MySQL数据库?

标签 mysql docker

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

This variable is optional and allows you to specify the name of a database to be created on image startup. If a user/password was supplied (see below) then that user will be granted superuser access (corresponding to GRANT ALL) to this database. MySQL docker Environment Variables

关于mysql - 如何在Docker启动时自动选择MySQL数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58969015/

相关文章:

php - 受密码保护的相册 PHP/MySQL 服务器负载

Mysql将数据从一个表复制到另一个表,重复键更新不起作用,重复数据

macos - 如何在我的 Mac 和 Docker 容器之间共享文件夹

docker - 如何在断开 SSH 后终止/停止远程 Docker 容器

mongodb - Mongo Docker与卷获取错误

php - MySQL 上删除级联删除parent_id on pk_id 删除

php - 具有唯一值 PHP 的 MySQL 回显组

mysql - 如何使用 ruby​​ 编程连接和访问 mysqldb

Docker 容器内的 Docker golang 客户端

node.js - docker nginx 负载平衡不适用于 Azure